严格和松散
swift不会进行隐式转换, 两个变量要进行计算的时候,一定要是相同的类型。swift对于类型要求特别严格。
例如:不能让一个整型和浮点型相加
可以进行显式转换
let num1 = 1
let num2 = 1.5
let num3 = num1 + num2 //是错误的
//进行强制类型转换
let num4 = Double(num1) + num2
自动推导
swift可以根据右边的值自动推导变量/常量的类型
let a = 1
let b = 2.1
//自己定义类型
let i: CGFloat = 10.1
if分支
if
let num = 20
if num > 10 {
print("大")
}
- if没有小括号
- 必须有花括号
- swift中,只有TRUE和FALSE,没有“非零即真”
例如:
if num > 5{
print("哈哈")
}
//以上是错误的
//懒加载可以写成
if dataList == nil{
...
}
if let(Optional Binding)
if let
是判断并且设置数值
//确保myUrl有值,才进入分支
if let myUrl = url {
print(myUrl)
}
通过在条件判断语句中(如if、while等)把Optional值直接给一个临时常量,Swift会自动检测Optional是否包含值,如果包含值,会隐式的拆包并给那个临时常量,在接下来的上下文中就能直接使用这个临时常量
??
操作
var oName = "张三"
let cName = oName ?? "abc"
//如果oName为nil,则cName为abc,反之,为oName
var dataList: [String]?
dataList = nil//["zhansan", "lisi"]
//dataList的问号,表示它可能为 nil
//如果为nil, .count 不会报错,仍然返回nil
//一旦dataList为空,就返回0,反之,返回count的结果
let count = dataList?.count ?? 0
//"!"感叹号表示强行解包,结果由程序员负责,出事了程序员背锅
let count1 = dataList!.count//报错qwqww
三目
let a = 80
let b = 20
let c = a > b ? 100 : -100
//如果a > b, c就是100,反之是-100
Optional
意思为可选的,可以有值,可以为nil
!
为强行解包,程序员认为此处一定有值,因此用!
强行解包,一旦出现错误,就会停在此处.
let url = NSURL(string: "www.google.com/中文")
//let request = NSURLRequest(url: url)
//更安全的写法
if url != nil {
let request = NSURLRequest(url: url! as URL)
}