Swift 3 的新特性

  1. ++ 和 --
    以前:
var i = 0
i++
++i
i--
--i

現(xiàn)在:

var i = 0
i += 1 // 或 i = i + 1
i -= 1 // 或 i = i - 1
  1. C語(yǔ)言風(fēng)格的for循環(huán)
    以前:
for (i = 1; i <= 10; i++) {
  print(i)
}

現(xiàn)在:

for i in 1...10 {
  print(i)
}
或者
(1...10).forEach {
  print($0)
}
  1. 移除函數(shù)參數(shù)的var旨椒,避免和inout混淆
    以前:
func gcd(var a: Int, var b: Int) -> Int {
 
  if (a == b) {
    return a
  }
 
  repeat {
    if (a > b) {
      a = a - b
    } else {
      b = b - a
    }
  } while (a != b)
 
  return a
}

現(xiàn)在:

func gcd(a: Int, b: Int) -> Int {
 
  if (a == b) {
    return a
  }
 
  var c = a
  var d = b
 
  repeat {
    if (c > d) {
      c = c - d
    } else {
      d = d - c
    }
  } while (c != d)
 
  return c
}
  1. 默認(rèn)添加調(diào)用函數(shù)時(shí)的第一個(gè)參數(shù)標(biāo)簽
    以前:
gcd(8, b: 12)

現(xiàn)在:

gcd(a: 8, b: 12)

現(xiàn)在遷移到以前:第一個(gè)參數(shù)標(biāo)簽為_(kāi)

func gcd(_ a: Int, b: Int) -> Int {

  }
  1. 移除用String生成Selector条篷,用#selector替代
    以前:
button.addTarget(responder, action: "tap", forControlEvents: .TouchUpInside)

現(xiàn)在:

button.addTarget(responder, action: #selector(Responder.tap), for: .touchUpInside)
  1. 移除用String生成keyPath
    以前:
let me = Person(name: "Cosmin")
me.valueForKeyPath("name")

現(xiàn)在:

let me = Person(name: "Cosmin")
me.value(forKeyPath: #keyPath(Person.name))
  1. Foundation 類(lèi)型去除NS前綴
    以前:
let file = NSBundle.mainBundle().pathForResource("tutorials", ofType: "json")
let url = NSURL(fileURLWithPath: file!)
let data = NSData(contentsOfURL: url)
let json = try! NSJSONSerialization.JSONObjectWithData(data!, options: [])
print(son)

現(xiàn)在:

let file = Bundle.main().pathForResource("tutorials", ofType: "json")
let url = URL(fileURLWithPath: file!)
let data = try! Data(contentsOf: url)
let json = try! JSONSerialization.jsonObject(with: data)
print(son)
  1. M_PI vs .pi
    以前:
let r =  3.0
let circumference = 2 * M_PI * r
let area = M_PI * r * r

現(xiàn)在:
Float.pi
Double.pi
CGFloat.pi

let r = 3.0
let circumference = 2 * Double.pi * r
let area = Double.pi * r * r

或使用類(lèi)型推斷

let r = 3.0
let circumference = 2 * .pi * r
let area = .pi * r * r
  1. GCD
    以前:
let queue = dispatch_queue_create("Swift 2.2", nil)
dispatch_async(queue) {
  print("Swift 2.2 queue")
}

現(xiàn)在:

let queue = DispatchQueue(label: "Swift 3")
queue.async {
  print("Swift 3 queue")
}
  1. Core Graphics
    以前:
override func drawRect(rect: CGRect) {
    let context = UIGraphicsGetCurrentContext()
    let blue = UIColor.blueColor().CGColor
    CGContextSetFillColorWithColor(context, blue)
    let red = UIColor.redColor().CGColor
    CGContextSetStrokeColorWithColor(context, red)
    CGContextSetLineWidth(context, 10)
    CGContextAddRect(context, frame)
    CGContextDrawPath(context, .FillStroke)
  }

現(xiàn)在:

 override func draw(_ rect: CGRect) {
    guard let context = UIGraphicsGetCurrentContext() else {
      return
    }
    
    let blue = UIColor.blue().cgColor
    context.setFillColor(blue)
    let red = UIColor.red().cgColor
    context.setStrokeColor(red)
    context.setLineWidth(10)
    context.addRect(frame)
    context.drawPath(using: .fillStroke)
  }
  1. 動(dòng)詞 和 名詞
  • 方法返回值 - 名詞
for i in (1...10).reversed() {
  print(i)
}
var array = [1, 5, 3, 2, 4]
for (index, value) in array.enumerated() {
  print("\(index + 1) \(value)")
}
var array = [1, 5, 3, 2, 4]
let sortedArray = array.sorted()
print(sortedArray)
  • 方法改變值 - 動(dòng)詞
var array = [1, 5, 3, 2, 4]
array.sort()
print(array)
  1. Swift API
    省略不必要的文字懦鼠,通過(guò)上下文推斷导梆。
  • XCPlaygroundPage.currentPage becomes PlaygroundPage.current
  • button.setTitle(forState) becomes button.setTitle(for)
  • button.addTarget(action, forControlEvents) becomes button.addTarget(action, for)
  • NSBundle.mainBundle() becomes Bundle.main()
  • NSData(contentsOfURL) becomes URL(contentsOf)
  • NSJSONSerialization.JSONObjectWithData() becomes JSONSerialization.jsonObject(with)
  • UIColor.blueColor() becomes UIColor.blue()
  • UIColor.redColor() becomes UIColor.red()
  1. 枚舉
    小寫(xiě)的駝峰標(biāo)識(shí)替代大小的駝峰標(biāo)識(shí)
  • .System becomes .system
  • .TouchUpInside becomes .touchUpInside
  • .FillStroke becomes .fillStroke
  • .CGColor becomes .cgColor
  1. 訪問(wèn)級(jí)別
    公開(kāi)(public)
    內(nèi)部(internal)
    文件外私有(fileprivate)
    私有(private):即使是在同一個(gè)文件當(dāng)中搀别,私有成員也只能夠在對(duì)應(yīng)的作用域當(dāng)中訪問(wèn)退个。

  2. 將 inout, @noescape 和 @autoclosure 聲明調(diào)整為類(lèi)型修飾

func double(input: inout Int) {
    input = input * 2
}
func noEscape(f: @noescape () -> ()) {}
func noEscape(f: @autoclosure () -> ()) {}
  1. 移除柯里化函數(shù)聲明語(yǔ)法
    以前:
func curried(x: Int)(y: Int) -> Int {
    return {(y: Int) -> Int in
        return x * y
    }
}

現(xiàn)在:

func curried(x: Int) -> (y: Int) -> Int {
    return {(y: Int) -> Int in
        return x * y
    }
}
  1. 允許(絕大多數(shù))關(guān)鍵詞作為參數(shù)標(biāo)簽
// Swift 3 calling with argument label:
calculateRevenue(for sales: numberOfCopies,
                 in .dollars)
// Swift 3 declaring with argument label:
calculateRevenue(for sales: Int,
                 in currency: Currency)

參考資料:

What’s New in Swift 3
Swift 3 新特性一覽

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市绽昼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌须蜗,老刑警劉巖硅确,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異明肮,居然都是意外死亡菱农,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)柿估,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)循未,“玉大人,你說(shuō)我怎么就攤上這事官份≈焕澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵舅巷,是天一觀的道長(zhǎng)羔味。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钠右,這世上最難降的妖魔是什么赋元? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮飒房,結(jié)果婚禮上搁凸,老公的妹妹穿的比我還像新娘。我一直安慰自己狠毯,他們只是感情好护糖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嚼松,像睡著了一般嫡良。 火紅的嫁衣襯著肌膚如雪锰扶。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天寝受,我揣著相機(jī)與錄音坷牛,去河邊找鬼。 笑死很澄,一個(gè)胖子當(dāng)著我的面吹牛京闰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甩苛,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蹂楣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了浪藻?” 一聲冷哼從身側(cè)響起捐迫,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爱葵,沒(méi)想到半個(gè)月后施戴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萌丈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年赞哗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辆雾。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肪笋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出度迂,到底是詐尸還是另有隱情藤乙,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布惭墓,位于F島的核電站坛梁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腊凶。R本人自食惡果不足惜划咐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钧萍。 院中可真熱鬧褐缠,春花似錦、人聲如沸风瘦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)万搔。三九已至胡桨,卻和暖如春俐载,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背登失。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挖炬,地道東北人揽浙。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像意敛,于是被迫代替她去往敵國(guó)和親馅巷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容