1. 基本類型
1.0 常量、變量和申明
- Swift中用
let關(guān)鍵字申明常量
let num = 1000
在編程中一個量被申明出來賦予初值后不再改變了,在這種情況下蘋果建議我們把這些量申明成常量,這樣對整個計算機資源的消耗比較小,整個程序更加的優(yōu)化
- Swift中用
var關(guān)鍵字申明變量
var index = 2
1.1 類型推斷
從上面的列子中,我們定義常量和變量的時候,并沒有指定它的類型,這樣的寫法在編譯器中并沒有報錯,這似乎有些不合常理。因為在OC中聲明一個變量時,必須要指定它的數(shù)據(jù)類型,eg:
const int count = 8;
NSString *str = @"Objective-C";
這個是因為在聲明變量的時候,不需要指定數(shù)據(jù)類型的特性依托于Swift強大的類型推斷功能。
在Swift中,聲明常量和變量可以通過在初始化時判斷傳遞給它的具體值得類型,并且把這個類型作為常量和變量的類型,eg:
let count = 8 // count 會被推斷為Int類型
var str = "Swift" // str會被推斷為String類型
當然,Swift也支持在聲明時顯式地指定常量或者變量的數(shù)值類型:
var name:String = "DeveloperLY"
1.2 注釋
有編程經(jīng)驗的朋友對注釋肯定不會陌生,Swift中也分為單行注釋和多行注釋。這里面Swift的多行注釋不同于其它語言,Swift支持嵌套注釋。
/*
這里是多行注釋
/*
Swift的多行注釋不同于其它語言,Swift支持嵌套注釋
*/
*/
1.3 控制臺輸出常量和變量
如果要把常量和變量在控制臺中打印,則用print函數(shù)。Swift2.0開始println()和print()已經(jīng)整合成print()。所以這個函數(shù)是默認換行的。
print(items: Any...)是默認換行的,參數(shù)items是可變參數(shù)。
print("Hello, Swift") // 會自動換行
print("Hello, Swift", terminator: "") // 設(shè)定結(jié)束符為空字符串,不進入下一行(不換行)
你也可以對items中的參數(shù)指定分隔符和終止符,即使用另一個重載的print方法:
print("a", "b", "c", separator: "+", terminator: "end")
打印結(jié)果:
a+b+cend
- 注意:帶有分隔符和終止符的print方法是不換行的。
Swift是采用字符串插值的方式在輸出的內(nèi)容中加入常量或者變量的值。eg:
let name = "DeveloperLY"
print("我的名字是\(name)")
打印結(jié)果:
我的名字是DeveloperLY
2. 基本數(shù)據(jù)類型
2.1 整數(shù)
Swift提供了Int和UInt兩種整數(shù)類型,分別表示有符號和無符號的整數(shù)類型。另外Int和UInt后面可以帶有數(shù)組8、16、32和64,以表示8、16、32和64位的整數(shù)。一般來說,我們并不需要指定整數(shù)的長度,使用UInt的情況也很少,在開發(fā)中使用Int類型即可。Int和UInt都是可以自適應平臺的類型。
2.2 浮點型
Swift提供了兩種浮點數(shù)類型:Float和Double。Float表示32位浮點數(shù),而Double表示64位浮點數(shù)。選擇哪種類型根據(jù)業(yè)務對精度的要求。
2.3 布爾類型
Swift提供了一個非真即假的邏輯類型---布爾類型(Bool)。布爾類型有兩個布爾常量:true 和 false。
這里需要注意的是:Swift中的布爾類型不同于OC中的BOOL類型,不再接受0代表false、0<代表true的用法。
2.4 元組類型
Swift中給我們提供了一個非常好用的數(shù)據(jù)類型---元組。它可以把多個值成員復合成一個值嗎,并且這些值成員的數(shù)據(jù)類型可以不同。eg:
let info = ("DeveloperLY", 18, "iOS開發(fā)者") // 一個包含三個成員值得元組
// 取出元組中的成員值(根據(jù)索引)
let name = info.0
let age = info.1
let job = info.2
// 我們也可以給每個成員值賦值
let info1 = (name: "DeveloperLY", age:18, job: "iOS開發(fā)者")
// 調(diào)用的時候也可以使用名稱調(diào)用
let showName = info1.name
let showAge = info1.age
let showJob = info1.job
// 另外如果想忽略元組中不重要的信息時,可以把元組傳遞到一個新的元組中,把需要忽略的值用“_”表示忽略
let (showName, _, _) = info1
print("name is \(showName)") // "打印結(jié)果:name is DeveloperLY"
2.5 可選型
可選型Optionals是Swift的新特性,它允許你存儲兩種狀態(tài)的值給Optional,變量:有效值或者nil,可選型用于某些不確定是否有值的情況,定義可選型只需在常規(guī)類型后面加一個“?”即可表示這個值是Optional。
Swift要求所有的Optional屬性都必須有明確的值,如果為空,則必須明確設(shè)定為nil。
Optional<T>是一個枚舉類型。
var someOptionalString: Optional<String> = "Optional"
var someOptionalString2: String? = "Optional" // 這句等價于上面一句,這句是推薦寫法,因為它更簡潔,問號(?)是Swift提供的語法糖
// 可選型不能直接使用,使用需要解包
if someOptionalString != nil {
// 變量不為空
if someOptionalString!.hasPrefix("Opt") {
print("has the perfix")
}
let empty = someOptionalString?.isEmpty
}
someOptionalString = nil
/*
使用(!)可以解決無法訪問Optional值得運行錯誤。若要使用(!)強制解析,一定要確保Optional里不是nil參數(shù)
*/
// 顯示解包Optional 變量
var unwrappedString: String! = "Value is expected."
var unwrappedString2: ImplicitlyUnwrappedOptional<String> = "Value is expected." // 和上面完全等價,(!)也是語法糖,推薦寫法
if let someOptionalStringConstant = someOptionalString {
// 由于變量someOptionalString 有值,不為空,所以 if 條件為真
if !someOptionalStringConstant.hasSuffix("ok") {
// does not have the prefix
}
}
someOptionalString2 = nil
func fooGuard() {
// 還有一種是先處理為空的
guard someOptionalString2 != nil else {
print("value is nil")
return
}
}
3. 基本運算符
3.1 賦值運算符
之前在定義常量和變量的時候已經(jīng)接觸過賦值運算符的用法了,Swfit使用等號“=”來表示賦值運算。與其他語言一樣,a = b,表示將b的值賦值給了a。如果是賦值的對象是一個元組,那么元組內(nèi)成員的值在賦值操作中是一一對應的。eg: let (x, y) = (1, 2),則1賦值給x,2賦值給y。
需要注意的是:Swift的賦值語句是沒有返回值的。
if x = y {} // 系統(tǒng)會直接報錯,避免了開發(fā)人員范設(shè)計性的錯誤。
3.2 數(shù)值運算
Swift和OC一樣,支持基本的加減乘除和求余運算。但是Swift中的數(shù)值運算比OC更加的強大。比如Swift中的“+”可以直接拼接字符串。Swift中的求余運算“%”可以對浮點數(shù)求余。
3 + 1
5 - 2
2 * 4
4 / 2
"iOS" + "開發(fā)者"
5 % 3
5.3 % 3
6 % 2.5
3.3 自增和自減運算
Swift 3.0之后已經(jīng)去掉了 “++”、“--” C語言風格的操作符進行自增和自減的操作了,新的寫法:
var a = 1
a += 1 // 自增
a -= 1 // 自減
相比于“++”、“--”,上面的寫法可以知道自增和自減的“步長”。
3.4 復合賦值
Swift提供把運算符和賦值復合起來使用的復合操作,與自增和自減操作類似,a += 2 的操作等同于 a = a + 2;
3.5 比較運算
所有C中的比較運算符在Swift中都可以使用。另外,在Swift中,“==”可以用在任何類型的比較中,而不像OC中那樣使用不同的isEqual方法。比較運算會返回Bool類型的比較結(jié)果。
3.6 三元運算符
與OC中的三元運算符用法一致,格式為:判斷條件 ? 為真時操作 :為假時操作。
3.7 邏輯運算符
Swift中的邏輯運算符的操作對象是布爾值。沿用了C語言中的三種邏輯運算:與、或、非。
3.8 范圍
在OC中,可以使用Range函數(shù)來指示一個起始位置和長度,從而框定一個范圍。
Swift中的范圍使用起來方便了許多,有兩種形式:
- 1...9 表示閉區(qū)間[1, 9],也就是從1到9的范圍。
- 1..<9 表示半閉區(qū)間[1, 9),也就是從1到8的范圍。
4. 字符串與字符
在Swift中,字符串的類型是String,不論定義的是常量字符串還是變量字符串。
let Str = "不可變字符串"
var mutableStr = "可變字符串"
// 連接字符串
let firstStr = "Swift 是未來iOS的主流開發(fā)語言,"
let secondStr = "你認為呢?"
let swiftStr = firstStr + secondStr
// 判斷字符串相等
let str1 = "DeveloperLY"
let str2 = "DeveloperLY"
if str1 == str2 {
print("相同") // 會執(zhí)行
}
處理字符串的難點是字符串的索引和字符串的創(chuàng)建,以及如何創(chuàng)建一個字符串的子串。
Swift的字符串是由另外一個類型來索引的,這個類型就是String.Index。
(未完待續(xù)...)