OC一個(gè)類(lèi)分.h頭文件和.m實(shí)現(xiàn)文件,Swift只有一個(gè).swift文件,文件數(shù)量上Swift比OC少;
Swift是類(lèi)型安全的語(yǔ)言,也就是變量等的類(lèi)型必須明確;
Swift引入了可選類(lèi)型(Optionals),用于處理值缺失的情況??蛇x表示"那兒有一個(gè)值,并且它等于 x "或者"那兒沒(méi)有值"。
Swift中的!和? 當(dāng)確定可選類(lèi)型確實(shí)包含值之后,可以在可選的名字后面加一個(gè)感嘆號(hào)(!)來(lái)獲取值。這個(gè)感嘆號(hào)表示"我知道這個(gè)可選有值,請(qǐng)使用它。"這被稱(chēng)為可選值的強(qiáng)制解析(forced unwrapping),?表示可選變量即使轉(zhuǎn)換不成功也不會(huì)報(bào)錯(cuò),變量值為nil
Swift獨(dú)有的元組類(lèi)型 元組(tuples)把多個(gè)值組合成一個(gè)復(fù)合值。元組內(nèi)的值可以是任意類(lèi)型,并不要求是相同類(lèi)型
Swift中使用let修飾常量,使用var修飾變量
OC中非0即是真,Swift中true是真,false是假
Swift的打印print可以print(lastName),不用OC那種%@、%d等
OC與Swift共用一套運(yùn)行時(shí)環(huán)境,Swift的類(lèi)型可以橋接到OC上,反之亦然,兩者可以互相引用混合編程。
Swift與OC都是用ARC(自動(dòng)引用計(jì)數(shù))來(lái)管理內(nèi)存
枚舉:
OC的枚舉相當(dāng)于這個(gè)文件中的一個(gè)局部變量,且只能是整型(默認(rèn)從0開(kāi)始),也可指定整型值;在同一文件中,不同的枚舉中,枚舉名稱(chēng)不可以相同。
Swift的枚舉,其枚舉值支持整型、浮點(diǎn)型、字符串、布爾類(lèi)型四種;創(chuàng)建時(shí)不分配默認(rèn)整數(shù)值;可以通過(guò)rawValue訪(fǎng)問(wèn)其原始值;可以通過(guò)Week(rawValue:6)創(chuàng)建一個(gè)枚舉實(shí)例
import UIKit
enum Week: Int {
case Mon
case Tues
case Wes
case Thu
case Fri
case Sat
case Sun
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//可以通過(guò)rawValue訪(fǎng)問(wèn)其原始值
let fri = Week.Fri.rawValue
print("This is ==\(fri)")
//可以通過(guò)Week(rawValue:6)創(chuàng)建一個(gè)枚舉實(shí)例
let ins = Week(rawValue: 6)
print("E \(ins ?? Week.Sat)")
}
}
打印:
This is ==4
E Sun
數(shù)組
NSArray是OC中的類(lèi)型,屬于引用類(lèi)型,Array是Swift中的結(jié)構(gòu)體類(lèi)型(struct),屬于值類(lèi)型
Swift數(shù)組是否可以被修改是通過(guò)var和let關(guān)鍵字決定的;OC中數(shù)組是否可以被修改是通過(guò)NSArray和NSMutableArray這兩個(gè)類(lèi)型來(lái)決定的;
Swift中數(shù)組,數(shù)據(jù)值被存儲(chǔ)進(jìn)入到某個(gè)數(shù)組之前類(lèi)型必須明確,可以顯式的類(lèi)型標(biāo)注或者類(lèi)型推斷,Swift的數(shù)組不必是對(duì)象類(lèi)型,可以存儲(chǔ)基本類(lèi)型,而OC的數(shù)組必須是對(duì)象類(lèi)型;
var cities = ["Beijing", "Shanghai", "Guangzhou"]
print(cities)
cities.append("Shenzhen")
print(cities)
var numbers: [Int] = []
numbers.append(888)
print(numbers)
打印:
["Beijing", "Shanghai", "Guangzhou"]
["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
[888]
字典
Swift的字典是否可以被修改是通過(guò)var和let關(guān)鍵字來(lái)決定的;
OC的字典是以NSDictionary和NSMutableDictionary來(lái)決定的;
Swift的字典的key可以是Int類(lèi)型,而OC的字典的key一般是字符串類(lèi)型
var dic1: [String: String] = ["name": "Jane", "age": "20"]
print(dic1)
dic1["height"] = "180"
print(dic1)
var dic2: [Int: String] = [1:"2222"]
print(dic2)
打印:
["name": "Jane", "age": "20"]
["name": "Jane", "age": "20", "height": "180"]
[1: "2222"]