1. 程式人生 > >教你做一款可以賺錢的iPhone APP》30

教你做一款可以賺錢的iPhone APP》30

第2部分 故事的進階要素 - 程式語言Swift的進階部分

18 型別轉換

18.1 概念通俗講解 型別轉換就是轉換當前常量,變數,例項的型別。例如Int型別轉換為String

18.2 定義簡潔介紹 下面介紹4個常用的使用場景 1).普通資料轉換 - 用構造方法 例如Int轉換為String,程式碼如下

let age = 10
String(age)

2).類的例項,把子類轉換為父類的型別時(向上轉換),這是有保證的轉換,用as。(這裡寫as!和as?也是可以的,編譯器不報錯) 使用as,編譯器認為它一定會轉換成功,當不確定強制轉換是否成功時,使用as?,會返回一個可選值,如果無法進行強制轉換,該值將為nil。as!是強行轉換,如果轉換不成功,程式閃退。示例如下

class Person{
}
class Man: Person {
}
let xiaoWang = Man()
xiaoWang as Person
//使用as? 把xiaoWang轉換為Person型別
if let xiaoWang = xiaoWang as? Person {
}

3).類的例項,把父類轉換為子類的型別時(向下轉換),這不是有保證的轉換,用as?或as!。(這裡寫as編譯器會報錯)。示例如下

class Person {
}
class Man: Person {
}
let xiaoWang: Person = Dog()
//編譯器報錯
xiaoWang as Man
//沒問題 xiaoWang as! Man //使用as? 把xiaoWang轉換為Man型別 if let xiaoWang = xiaoWang as? Man { }

4).當資料型別是Any或AnyObject型別,需要轉為一個具體的型別時(向下轉換),用as?或as!。(這裡寫as編譯器會報錯)。示例如下

class Man{
}
class Woman{
}
let xiaoWang = Man()
let xiaoLi = Woman()
let data:[Any] = [xiaoWang, xiaoLi]
for item in data{
    //item是Any型別的
    if
let item = item as? Man{ } }

18.3 我的經驗總結 1).一般資料型別的轉換用構造方法的方式來轉換。無法用as的方式,as的方式只能用於轉換Any或AnyObject。 2).能用as都可以用as!或as?。但向下轉化的場景,能用as!或as?的不能用as。 3).實際開發中,可以用as的話,只用as。只能用as?或as!的話,不用as!,只用as?。

注:本人水平和能力有限,如果哪些地方寫錯了,請大家給我反饋,我會及時修改。