Swift相比OC語言有哪些優點


Swift相比OC語言有哪些優點
1、自動做類型推斷

2、可以保證類型使用安全

Swif類型說明符
——Swift增加了Tuple表示元組類型

——Swift增加了Optional表示可選類型

常量一變量命名:
——可以用任何你喜歡的字符作為常量和變量名,包含Unicode 字符

——常量與變量名不能包含數學符號,箭頭,保留的(或者非法的)Unicode 碼位,連線與制表符

——不能以數字開頭,但是可以在常量與變量名的其他地方包含數字

/*

\n —— 換行

\t —— 水平制表符 (4個空格)

\—— 表示1個\

"—— 表示1個"

'——表示1個'

*/

3.5e2 == 3.5乘以10的二次方

3.5e-3 == 3.5乘以10的-3次方

C的函數定義
         charname[10] ="China";

char address[10] = {'C','h','i','n','a','\0','B','e','i','\0'};

NSLog(@"%ld",strlen(name));//里面字符串的長度

NSLog(@"%ld",sizeof(address));

//包含\0的長度(自己定義字符串長度后會使用調用后的長度)

charsex[] ="nan";

NSLog(@"%c",sex[2]);

Swift
Swift中要想越界

num = num &+ 1(溢出運算)

var str1 = "China"

var str2 = str1 + "Beijing"

str1 += "Beijing"

9 % 4  //  等於1

9 % -4  //  等於1

-9 % 4  //  等於-1

-9 % -4  //  等於-1

BOOL類型比較
只能使用 == 或者 !=   不可以使用  >、<、>=、<=

當倆個元組中的數據類型及順序完全匹配時,可以使用比較運算符比較

如果元組包含Bool類型,只能使用==和!=比較,不可以使用>、<、>=、<=

Swift 標准庫只能比較七個以內元素的元組比較函數。如果你的元組元素超過七個時,你需要自己實現比較運算符。

空合運算符(只適用於可選類型)
形式:a ?? b

對可選類型 a 進行空判斷,如果 a 包含一個值就進行解封,否則就返回一個值 b

表達式 a 必須是 Optional 類型

默認值 b 的類型必須要和 a 儲存值的類型保持一致

區間運算符
1、閉區間

a...b定義一個包含從 a 到 b (包含 a 和 b )的所有值的區間

a 的值不能超過 b

2、半開區間

a ..< b 定義一個包含從 a 到 b(不包含b)的所有值的區間

a 的值不能超過 b

3、自增自減運算符在Swift中不能用

++a (前增)         a++ (后增)        --a (前減) a-- (后減)

//使用索引值
var name = "yangyingqiu"        (后面會自定添加\0)

var index = name.startIndex //得到字符“Y”的索引值

index  = name.endIndex  //得到最后位置的索引值,比最后一個字符“g”的位置打1

index = name.index(after: name.startIndex) //獲取起始位置之后的索引值

index = name.index(before: name.endIndex)  //獲取最后位置之前的索引值

index = name.index(name.startIndex, offsetBy:3) //

index = name.index(name.endIndex, offsetBy:-4) //

print(name[index])

遍歷字符串中的每個字符
//for in循環

for item in name {

print(item, terminator:"")

}

print()

//while循環

var offset = 0

while offset < name.count {

let index = name.index(name.startIndex, offsetBy: offset)

//(let index:String.Index = name.index(name.startIndex, offsetBy: offset))

print(name[index])

offset += 1

}

//遍歷字符串的所有索引值,從而遍歷每個字符

for myIndex in name.indices {

print(name[myIndex])

}

可選綁定語法
if let item = a {

print{item}

}

//遍歷語法
for var item in1...5   {      //如果不加var默認為let

print{item}

}

let base = 3

let power = 10

var answer = 1

//如果在循環體中不需要循環變量的值,可以使用下划線代替變量的名稱

for _ in 1...power {

answer * = base

}

Switch語句中可以加 int char string 枚舉 double(后面必須加default)如果想滿足多個條件打印同一個結果可以用“,”來隔開
var ch = 3

switch ch {

case 10:

print("不講價")

case 7...9:

print("(ch)折")

default :

print ("不可能")

} //可以添加元組類型的數據

給循環添加 標簽

outer: for I in 1...3 {

inner:for j in 1...5{

break outer

}

print("I = (i),j = (j)")

}

//Swift中,Struct,Double,String、數組、字典、都是值類型
//swift中,類、函數、閉包都是引用類型
//如果結構體中的s已經是常量,里面的成員變量和結構體本身就不可以重新賦值了
//如果類中的s是常量,里面的成員變量可以重新賦值變量,不能重新賦值常量
//、在swift中 == 號只能用在值類型不能用在引用類型(== 在自定義的結構體中自定義的類中也不可以用)
//Swift中 === (恆等於)  !==(恆不等於)只能用於引用類型,不能用於值類型,判斷倆個對象指向同一個內存空間(判斷地址)
//在結構體中,必須講方法聲明為可變的,才可以在方法體中改變屬性的值
//在類中可以直接改變屬性的值
重寫set、get方法的時候方法里面不能出現sum屬性本省否則出現死循環、

如果沒有加set、get就會默認重寫get語句,get中有倆個語句的話就必須添加get方法

lazy起到延遲加載作用,在調用的時候使用

//便利構造器(如果在某個構造器中調用其他的構造器,須要將構造器做成便利構造器)

指定構造器與便利構造器的區別:

默認構造器是系統提供的構造器

指定構造器是類中主要的構造器,一個指定構造器將初始化類中所提供的所有屬性

便利構造器是類中次要的、輔助型的構造器,可以定義便利構造器來調用同一個類中的指定構造器

//子類可以繼承父類中所有的屬性和方法,子類可以有自己獨有的屬性和方法

//子類可以重寫父類中的方法

你可以將一個繼承來的只讀屬性重寫為一個讀寫屬性,只需要在重寫版本的屬性里提供,getter 和setter 即可,但是,你可以將一個繼承來的讀寫屬性重寫為一個只讀屬性

循環強引用問題(retain cycle),在倆個類中互相包含對方的對象做成自己的屬性會發生循環強引用

解決:1、使用弱引用,用一個weak來修飾

2、unowned(不能使用引用類型,只能使用基本類型)

thows:一般用於方法定義的按返回值之前,表好似將該方法做成一個可拋出錯誤的方法(throwing)

Thow:一般用於方法體內,拋出某個具體的錯誤,如果能執行throw,后續語句都不會執行,該方法調用立即結束,等效return語句

Ios  多態

不同類中有相同方法,調用的時候互不影響

父類指針指向子類,調用一個被重寫的方法,父類指針調用這個方法呈現的都是子類中方法的定義執行

擴展

//var name:String = ""(在擴展中不可以擴展存儲屬性)

//可以擴展“計算屬性”

//可以擴展“只讀屬性”

//存儲類型的類屬性

//計算類型的類屬性

//只讀類型的類屬性

//添加對象方法

//添加類方法

//在擴展中只能為類添加便利構造器,不可以添加指定構造器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM