a...b 表示[a, b] 包括 a 和 b 。(eg:3...5,就是範圍 3, 4, 5)
a..元組型別元組(tuples)把多個值組合成乙個復合值。元組內的值可以是任意型別,並不要求型別一致。
eg: var
value = (int, string) = (x:15, y:"hello")
使用常量,更加安全,不能夠被修改,在需要對物件進行修改的時候,只能用var進行修飾
減少**量,安全出路資料邏輯
這兩個符號是用來標記這個變數的值是否是可選,! 表示可選變數必須保證轉換能夠成功,否則報錯,但定義的變數可以直接使用;?表示可選變數試試轉換不成功也不會報錯,變數值為nil,如果轉換成功,要使用該變數時,後面需要加!進行修飾
(1)swift中不區分.h和.m檔案,乙個類只有.swift乙個檔案
(2)swift句尾不需要分號,除非你想在一行中寫三行**這時就需要使用分號區分
(3)swift資料型別都會自動判斷,只區分變數var和常量let
(4)強制型別轉換格式不同,oc強**(int)a, swift強**int(a)
(5)關於bool型別更加嚴格,swift不再是oc的非0即是真,而是true才是真,false才是假
(6)swift迴圈語句中必須加{},就算只有一行**也需要新增
(7)swift中的switch語句後面可以跟任何資料型別,如int,字串都行,並且不用謝break;oc只能跟 整形、列舉型別、
(8)swift if後面的括號可以省略:if a > b {},而oc裡面if後面必須寫括號
(9)swift列印用 print("") 列印變數時可以 print("\(value)"),不用像oc那樣記很多%@,%d等
(10)swift的[any]可以代表任意型別的值,無論是類、列舉、結構體還是任何swift型別,這個對應oc中的id型別
(1)fileprivate
在原有的swift中的private其實並不真正的私有,如果乙個變數定義為private,在同乙個檔案中的其他類依然是可以訪問到的,這個場景在使用extension的時候很明顯。
class
user
extension user
}
fileprivate 顯示的表明,這個元素的訪問許可權為檔案內私有。
過去的private對應現在的fileprivate。現在的private則是真正的私有,離開了這個類或者結構體的作用域外面就無法訪問。
所以fileprivate > private
(2)open則是彌補public語義上的不足。現在的public有兩層含義:
這個元素可以在其他作用域被訪問
這個元素可以在其他作用域被繼承或者override
通俗的理解public和open就是:
public:可以被任何人訪問,但其他module中不可以被override和繼承,而在module內可以被override和繼承;
open:可以被任何人使用,包括override和繼承
//(1) 這個類在moudlea的範圍外是不能被繼承的,只能被訪問
public
class
nonsubclassableparentclass
//這是錯誤的寫法,因為class已經不能被繼承
//所以他的方法的訪問許可權不能大於類的訪問許可權
open func bar() {}
//final的含義保持不變
public
final func baz() {}
}//(2) 這個在modulea的範圍外可以被繼承
open class
subclassableparentclass
//這個方法在任何地方都可以被override
open func bar() {}
//final的含義保持不變
public
final func baz() {}
}//(3) final的含義保持不變
public
final
class
finalclass {}
//(4) 這個寫法是錯誤的,編譯會失敗
// 因為nonsubclassableparentclass類訪問許可權標記的是public,只能被訪問不能被繼承
class
subclassa : nonsubclassableparentclass
//(5) 這樣寫法可以通過,因為subclassableparentclass訪問許可權為 `open`.
class
subclassb : subclassableparentclass
// 這個方法因為在subclassableparentclass中標記為open,所以可以這樣寫
// 這裡不需要再宣告為open,因為這個類是internal的
override func bar()
}open class
subclassc : subclassableparentclass
}open class
subclassd : subclassableparentclass
}open class
subclasse : subclassableparentclass
}
//(4)總結:現在的訪問許可權 由大到小 依次為: open public internal(預設) fileprivate private
//internal是系統預設的級別。internal訪問級別所修飾的屬性或方法在源**所在的整個模組都可以訪問
//如果是框架或者庫**,則在整個框架內部都可以訪問,框架由外部**所引用時,則不可以訪問
swift和OC的區別
1.swift句尾的分號可以省略,除非你想在一行中寫多行 需要加分號隔開 2.swift不需要寫main函式,程式預設從上往下執行 3.swift不再有位址的概念 4.swift不分.h和.m檔案,每個類只有乙個.swift檔案 5.swift會自動判斷資料型別,只區分變數var和常量let 6.s...
Swift和OC的區別?
1.swift是靜態語言,有型別推斷,oc是動態語言。2.swift面向協議程式設計,oc物件導向程式設計 3.swift注重值型別,oc注重引用型別。4.swift支援泛型,oc只支援輕量泛型 5.swift支援靜態派發 效率高 動態派發 函式表派發 訊息派發 方式,oc支援動態派發 訊息派發 方...
Swift與OC的混編
自2014年蘋果推出了swift之後,確實很快就受到許多開發者的歡迎但在實際開發時,可能有許多第三方庫並未實現 swift化,這時就需要swift與oc的混編技巧 1.在.件中引用swift的類和方法,需要在.件中進行引用,需要注意引用格式 import yourprojectname swift....