1.類型
swift采用類型推斷機(jī)制
swift運(yùn)行時(shí)類型是確定的,不需要like OC采用respondsToSelector去檢查
2.泛型的應(yīng)用爹脾,避免了重復(fù)造輪子
struct Pair<T: Equatable> {
let a: T!
let b: T!
init(a: T, b: T) {
self.a = a
self.b = b
}
func equal() -> Bool {
return a == b
}
}
let pair = Pair(a: 5, b: 10)
pair.a // 5
pair.b // 10
pair.equal() // false
let floatPair = Pair(a: 3.14159, b: 2.0)
floatPair.a // 3.14159
floatPair.b // 2.0
floatPair.equal() // false
3.范性適用于數(shù)組和字典
一目了然:
let array: Array<Int> = [1, 2, 3, 4]
let dictionary: Dictionary<String, Int> = ["dog": 1, "elephant": 2]
簡(jiǎn)化版:
let array: [Int] = [1, 2, 3, 4]
let dictionary: [String: Int] = ["dog": 1, "elephant": 2]
區(qū)別注意點(diǎn):
OC中數(shù)組和字典中存儲(chǔ)的都是對(duì)象,哪怕是數(shù)字也必須轉(zhuǎn)成number對(duì)象敢艰,然后存儲(chǔ),所以他不能直接存儲(chǔ)int食侮,而且它內(nèi)部的對(duì)象不固定類型筏勒,只要是對(duì)象就好,可以混合存儲(chǔ)楞慈。
Swift中數(shù)組和字典,則類型固定啃擦,比如上面的范性的應(yīng)用本身就說(shuō)明不能存儲(chǔ)交叉類型的囊蓝,即不能混合存儲(chǔ)數(shù)據(jù)。
4.swift采用let 和 var 區(qū)分變量的可變和不可變類型
5.字符串的優(yōu)化
對(duì)比OC:
Person *person = ...;
NSMutableString *description = [[NSMutableString alloc] init];
[description appendFormat:@"%@ is %i years old.", person.name, person.age];
if (person.employer) {
[description appendFormat:@" They work for %@.", person.employer];
} else {
[description appendString:@" They are unemployed."];
}
對(duì)比Swift:
var description = ""
description += "\(person.name) is \(person.age) years old."
if person.employer {
description += " They work for \(person.employer)."
} else {
description += " They are unemployed."
}
明顯簡(jiǎn)化了 :
字符串的拼接 +=
字符串的引用 ()
if判斷可以不加()
其次字符串比較也做了簡(jiǎn)化:用==就可以比較兩個(gè)字符串了
最后字符串的計(jì)數(shù)令蛉,用了最安全的方式聚霜,countElements(),據(jù)說(shuō)這個(gè)方法可以忽略機(jī)器中編碼方式的差別珠叔。
var poos = "\u{1f4a9}\u{1f4a9}"
countElements(poos) // 2
6.swich無(wú)比強(qiáng)大
請(qǐng)看一個(gè)例子:
switch i {
case 0, 1, 2:
println("Small")
case 3...7:
println("Medium")
case 8..<10:
println("Large")
case _ where i % 2 == 0:
println("Even")
case _ where i % 2 == 1:
println("Odd")
default:
break
}
如下的優(yōu)點(diǎn):
不再需要不厭其煩的break了
可以直接用...和..< 匹配一個(gè)閉區(qū)間和開區(qū)間的
可以用_匹配任意值蝎宇,同時(shí)附帶條件用where做特殊處理,類似SQL語(yǔ)句