OC與Swift的區別

2021-08-14 07:38:28 字數 2991 閱讀 3630

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....