Swift语法简介(一)
或许网络上有很多成型的介绍,我只想写下来留给自己。欢迎批评。开撸!
1、第一个程序,Hello,world!古人云,学会了Hello,world!这门语言你就掌握了一半了。
print("Hello,World!")
已经学了这门语言的一半,你是不是很开心?刚开始写这句代码的时候,让我想起了久违的Pascal,一样的书写方式,字符串没有OC里的@来修饰。只是Pascal现在已经销声匿迹了(我一直没发现有用Pascal做开发的公司),很是怀念。现在的脑海里依稀记得04年的第一句Hello,World!
2、定义常量和变量
swfit中,对象或数据的定义,只有两种 let 和 var。不再需要像OC里边需要指定对象的类型,例如
int i = 1;
UIView *v = UIView()
常量定义 let i = 1;变量定义 var j = 2; j =3。Xcode里边,系统会智能判断,你定义的类型是否合理,假设你定义一个var i = 1,但再后边并没有对i 的值进行修改,那么系统会给你警示,i的定义应该用let。同样的,如果用let修饰,后边又进行了赋值操作,那么系统会给一个警告,需要用var。数据的类型是根据赋值的内容进行推导出来的。
let u = UIView()
let i = 1
let j:Double = 2
var b = UIButton()
b = UIButton(frame:frame)
上面几行代码给出了几条语句,根据系统推断:u 是 UIView,i 是Int ,j是Double(可以在变量后边加:然后注明该变量的准确类型,此处如果不加,系统会被认定是Int类型),b是UIButton类型。
3、没有隐式的类型转换。再OC中,如下代码是可以正常编译的
Int i = 1
Double j = 2
j = j + i
但是在Swift中,就会报错{ Binary operator '+' cannot be applied to operands of type 'Double' and 'Int'},Double 和 Int 无法操作。需要将运算符两边转换成相同的数据类型,如下述代码
let i = 1
var j : Double = 2
j = j + Double(i)
当然,也可以将Double转成Int,注意:Double转成Int会省略小数位,并不会四舍五入
4、可选值Optional
var i : Double?
定义一个Double类型的i,可以赋值nil。如果不加问号,就不可以赋值nil。这个特性跟C#中有异曲同工之处。该类型的是不允许直接参与计算的,需要配合符号进行运算,!强制解包计算(如果强制解包的数据是nil,程序会Crash掉),??判断如果为空的话,给出其他值。下边就上代码详细说明
var i : int?
var j : Int
j = i -----编译不会通过,系统会提示让你解包
j = i! -----将i强制解包,程序Crash
j = i ?? 2 -----如果i是nil,将2赋值给j
5、流程控制语句if else switch case ? :,不多赘述,直接看代码
let i = 100
if i < 60 {
print("不及格")
}else{
print("及格了~")
} switch i {
case 0...60 :print("不及格")
default:print("及格了")
}
switch i {
case let j where j = 60 : print("及格")
case _ where i = 60 :print("及格")
case 60 : print("及格")
default: return
}
if i<60?print("不及格") : print("及格了")
有语言功底的,看如上代码,应该很容易理解。就不做太多的文字说明了。需要强调的一点是switch中 case中,0...60,代表从0到60的所有值。三个.哦。重点强调一下第二种switch的用法。在case中,可以生成新的变量来代替 switch里的变量,并加where来做逻辑判断,如果只要做条件判断,那么可以直接用_代替赋值部分。并且 case接受的值可以是一样的。在switch中,case无法进行穿透。
6、可选值的条件判断
var i : Int? = 100
if let j = i where i <60 {
print(j)
} guard let j = i else {
return
}
看了上边的代码,是不是开始蒙蒙哒了,因为是新的知识点,我就多嘴说两句,首先 if let 和 guard let,只能用于可选值的判断,如果 i 是 Int类型,上述代码会报错。if let j = i ,表示,当i不为空的时候,设置 j = i,此时j 的类型就是Int类型,后边的where作为条件判断(有数据库知识的同学应该会很亲切)。括号里边执行的代码,也是当 j可以成功赋值的时候才会执行。guard和if类似,判断 i不为空的时候,赋值给 j ,不同点是,guard let后边不能直接跟括号,而是要加else {},括号里的逻辑,就是当i为nil的时候的逻辑。注意:guard let 里边的{}需要加上return
7、循环
sum = 0
for i in 0..<10 { --------0....9 两个点,加小于号,相当于三个. 注意数值的变化,三个.代表可以取到
sum += i
}
print(sum) for _ in 0...9 { ---------如果循环中未用到循环的变量,可以省略用_来代替
print("hello")
} while i < 10 {
i++
}
repeat {
i--
} while i > 10
for循环和while循环的演示,在Swift中,repeat 代替了do 和while凑成了一对循环。看到repeat,又让我想到了Pascal中的Repeat until 循环,很是亲切。
今天先写到这里,后边我会继续补充其他的内容,希望可以跟大家一起成长。
Swift语法简介(一)的更多相关文章
- Swift语法简介(二)闭包
突然看到别人写的关于Block的帖子,让我突然有一种想写一篇关于闭包的帖子.在我的认知中,Swift中的闭包,就是Object-C中的Block--(或许我的认知太浅了).先上一个闭包的简单例子 le ...
- ios -- 教你如何轻松学习Swift语法(三) 完结篇
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.自动引用计数 1.自动引用计数工作机制 1.1 swift和o ...
- ios -- 教你如何轻松学习Swift语法(一)
目前随着公司开发模式的变更,swift也显得越发重要,相对来说,swift语言更加简洁,严谨.但对于我来说,感觉swift细节的处理很繁琐,可能是还没适应的缘故吧.基本每写一句代码,都要对变量的数据类 ...
- Swift语法入门
正文参考: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Progra ...
- ios -- 教你如何轻松学习Swift语法(二)
前言:swift语法基础篇(二)来了,想学习swift的朋友可以拿去参考哦,有兴趣可以相互探讨,共同学习哦. 一.可选类型(重点内容) 1.什么是可选类型? 1.1在OC开 ...
- freemarker语法简介
ftl是一种模板标记语言,用于渲染数据,输入html结构.语法简介如下: ${book.name} ${book.name?if_exists} //值是否存在 ${book.name??} //值是 ...
- Swift翻译之-Swift语法入门 Swift语法介绍
目录[-] Hello world - Swift 简单赋值 控制流 函数与闭包 对象和类 枚举与结构 协议和扩展 泛型 2014.6.3日,苹果公布最新编程语言Swift,Swift是一种新的编程语 ...
- Swift语法总结补充(一)
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1. 可选类型是一种类型,String?就是Optional<String>,所以函数参数也可以声明为它2 ...
- Swift语法
Swift语法 标签(空格分隔): Swift 1.打印输出语句 println("Hello, Swift!") 注意每行代码后面无需添加分号作为结束 2.简单值 let---常 ...
随机推荐
- eclipse导入PIL报错
有些模块,比如PIL,已经装入过,但是在pydev中无法自动提示,甚至有报 unresolved import的问题,虽然不会引起运行时问题,但是无法实现自动提示,还是一件很麻烦的事情. 下面有个解决 ...
- 【C#】项目优化实战
[C#]项目优化实战 一. 数据库设计 1. 常量的枚举值直接存中文不要存数字(注意是常量,如果显示值可变就不能) 例如:男女,在数据库中不要存1和0,直接存男和女. 这样的好处:读取数据的时候可以避 ...
- redis配置文件redis.conf说明
redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no2. 当Redis以守护进程方式运行时, ...
- 利用target的特性,可以实现纯css的tab效果切换
基础知识: :target起作用的是href连接到的位置 如 <a href="#tab1">tab1</a> <div id="tab1& ...
- Codeforces Round #385 //再遇状压
敲完三题挂机一小时..... 也没懂DE什么意思 rank600上了一波分... A. Hongcow Learns the Cyclic Shift 给一个字符串,每次可以把最后一个字符拿到开头 ...
- Linux 中 Vi 编辑器的简单操作
Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi filename //打开或新 ...
- Lucene教程(转)
Lucene教程 1 lucene简介1.1 什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像www.baidu.com 或者google Desktop那么拿来 ...
- JavaWeb 学习009-4个页面,5条sql语句(添加、查看、修改、删除)
===========++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++==+++++++++ 2016-12-3------ ...
- Spring SpringMVC和Mybatis整合
1.引入所要的jar包 2.创建Mybatis的sqlMapConfig.xml配置文件,该文件中可以配置mybaits的相关参数,数据源不在这里配置. <?xml version=" ...
- 漫谈Linux内核哈希表(1)
关于哈希表,在内核里设计两个很重要的数据结构: 哈希链表节点: 点击(此处)折叠或打开 .x [include/linux/types.h]*/ struct hlist_node { stru ...