var 定義變量,設(shè)置之后可以修改
let 定義常量疑务,設(shè)置之后不可以修改
語(yǔ)句末尾不用使用 ;
在 Swift 中使用 print()替代 OC 中的 NSLog,print 的性能更好
C: printf("Hello, World!");
OC:NSLog(@"Hello, World!");
Swift1.2:println("Hello, World!")
Swift2.0:print("Hello, World!")
變量:
OC:
先定義再初始化
int num;
num = 10;
定義的同時(shí)初始化
int num2 = 20;
Swift:
先定義再初始化
var num
報(bào)錯(cuò): 沒(méi)有指定數(shù)據(jù)類(lèi)型(type annotation missing in pattern), 在Swift中如果想要先定義一個(gè)變量, 以后使用時(shí)再初始化必須在定義時(shí)告訴編譯器變量的類(lèi)型(類(lèi)型標(biāo)注)
var num: Int
num = 10
定義的同時(shí)初始化
在Swift中如果定義的同時(shí)初始化一個(gè)變量,可以不用寫(xiě)數(shù)據(jù)類(lèi)型, 編譯器會(huì)根據(jù)初始化的值自動(dòng)推斷出變量的類(lèi)型(其它語(yǔ)言是沒(méi)有類(lèi)型推斷的)
以后在開(kāi)發(fā)中如果在定義的同時(shí)初始化就沒(méi)有必要指定數(shù)據(jù)類(lèi)型, 除非需要明確數(shù)據(jù)類(lèi)型的長(zhǎng)度或者定義時(shí)不初始化才需要指定數(shù)據(jù)類(lèi)型
var num2: Int = 20
var num3 = 20
你可以用任何你喜歡的字符作為常量和變量名,包括 Unicode 字符
常量與變量名不能包含數(shù)學(xué)符號(hào)行剂,箭頭蹬刷,保留的(或者非法的)Unicode 碼位遥金,連線與制表符可很。
也不能以數(shù)字開(kāi)頭鳄虱,但是可以在常量與變量名的其他地方包含數(shù)字弟塞。
錯(cuò)誤:
var 3x = 10
var x+-3 = 10
正確:
var ?? = 100
var 哈哈 = 300
常量:
OC: const int num = 10;
Swift: let num = 10
錯(cuò)誤:
let num : Int
Swift中的常量必須在定義時(shí)初始化(OC可以不初始化), 否則會(huì)報(bào)錯(cuò)
常量的用途: 某些值以后不需要改變, 例如身份證
let num4 = 10
基本數(shù)據(jù)類(lèi)型
OC:
整型 int intValue = 10;
浮點(diǎn)型 double doubleValue = 10.10; float floatValue = 5.1;
長(zhǎng) long
短 short
有符號(hào) signed
無(wú)符號(hào) unsigned
各種類(lèi)型的數(shù)據(jù)的取值范圍在不同位的編譯器下取值范圍不同
Swift:注意關(guān)鍵字大寫(xiě)
//整型
var intValue:Int = 10
//浮點(diǎn)型
var intValue1:Double = 10.10 // 表示64位浮點(diǎn)數(shù)
var intValue2:Float = 9.9 // 表示32位浮點(diǎn)數(shù)
//如果按照長(zhǎng)度劃分,Swift中的長(zhǎng)短比OC更加精確
var intValue3:Int8 = 6
var intValue4:Int16 = 7
var intValue5:Int32 = 8
var intValue6:Int64 = 9
有符號(hào)無(wú)符號(hào), 默認(rèn)是有符號(hào)的(UInt8/UInt16/UInt32/UInt64)
var uintValue7:UInt = 10
注意: 無(wú)符號(hào)的數(shù)比有符號(hào)的取值范圍更大, 因?yàn)榉?hào)位也用來(lái)存值
Swift是類(lèi)型安全的語(yǔ)言, 如果取值錯(cuò)誤會(huì)直接報(bào)錯(cuò), 而OC不會(huì)(OC支持隱式類(lèi)型轉(zhuǎn)換);Swift不允許隱式類(lèi)型轉(zhuǎn)換, 但可以使用顯示類(lèi)型轉(zhuǎn)換(強(qiáng)制類(lèi)型轉(zhuǎn)換)
取值不對(duì)
OC:unsigned int intValue = -10; 不會(huì)報(bào)錯(cuò)
Swift:var intValue:UInt = -10 會(huì)報(bào)錯(cuò)
溢出:
OC:int intValue = INT_MAX + 1; 不會(huì)報(bào)錯(cuò)
Swift:var intValue:UInt = UInt.max + 1 會(huì)報(bào)錯(cuò)
數(shù)據(jù)類(lèi)型的相互賦值(隱式類(lèi)型轉(zhuǎn)換)
OC可以
int intValue = 10;
double doubleValue = intValue;
double doubleValue = (double)intValue;
Swift:不可以
var intValue:Int = 10
var doubleValue:Double
// error : Cannot convert value of type 'Int' to specified type 'Double'
doubleValue = intValue
doubleValue = Double(intValue) // correct
在Swift中“值永遠(yuǎn)不會(huì)被隱式轉(zhuǎn)換為其他類(lèi)型”(OC中可以隱式類(lèi)型轉(zhuǎn)換), 以上語(yǔ)句會(huì)報(bào)錯(cuò)
// 注意:Double()并不會(huì)修改intValue的值, 而是通過(guò)intValue的值生成一個(gè)臨時(shí)的值賦值給doubleValue
print(intValue)
print(doubleValue)