What’s New in Swift 3? 筆記
標籤(空格分隔): 譯文
關於 API 的
- 很多 APIs 改名了,具體請看API Design Guidelines
- 呼叫函式或者方法第一個引數有引數名了。
// old way, Swift 2, followed by new way, Swift 3
"RW".writeToFile("filename", atomically: true, encoding: NSUTF8StringEncoding)
"RW".write(toFile: "filename", atomically: true, encoding: NSUTF8StringEncoding)
SKAction.rotateByAngle(CGFloat(M_PI_2), duration: 10)
SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 10)
UIFont.preferredFontForTextStyle(UIFontTextStyleSubheadline)
UIFont.preferredFont(forTextStyle: UIFontTextStyleSubheadline)
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
override func numberOfSections(in tableView: UITableView) -> Int
func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView?
func viewForZooming(in scrollView: UIScrollView) -> UIView?
NSTimer.scheduledTimerWithTimeInterval(0.35, target: self, selector: #selector(reset), userInfo: nil, repeats: true)
NSTimer.scheduledTimer(timeInterval: 0.35, target: self, selector: #selector(reset), userInfo: nil, repeats: true)
你可以看到以上程式碼有很多介詞,這是為了優化可讀性。
你現在可以看到很多過載的方法名,因為 APIs 變得更加直白,下面有2個 index():
的例子:
let names = ["Anna", "Barbara"]
if let annaIndex = names.index(of: "Anna") {
print("Barbara's position: \(names.index(after: annaIndex))")
}
總而言之,引數名的改變讓方法名變得更加統一和容易學習。
- 刪減了不必要的單詞,讓 API 變得更加 Swifty[SE-0005]:
// old way, Swift 2, followed by new way, Swift 3
let blue = UIColor.blueColor()
let blue = UIColor.blue()
let min = numbers.minElement()
let min = numbers.min()
attributedString.appendAttributedString(anotherString)
attributedString.append(anotherString)
names.insert("Jane", atIndex: 0)
names.insert("Jane", at: 0)
UIDevice.currentDevice()
UIDevice.current()
GCD and Core Graphics
GCD 被用於很多執行緒任務類似於與伺服器通訊和大量計算。libdispatch庫使用 C 語言寫的並且經常使用 C style API。現在 API 變得更加 Swifty[SE-0088]:
// old way, Swift 2
let queue = dispatch_queue_create("com.test.myqueue", nil)
dispatch_async(queue) {
print("Hello World")
}
// new way, Swift 3
let queue = DispatchQueue(label: "com.test.myqueue")
queue.asynchronously {
print("Hello World")
}
Core Graphics 和 GCD 一樣,請看[SE-0044]:
// old way, Swift 2
let ctx = UIGraphicsGetCurrentContext()
let rectangle = CGRect(x: 0, y: 0, width: 512, height: 512)
CGContextSetFillColorWithColor(ctx, UIColor.blueColor().CGColor)
CGContextSetStrokeColorWithColor(ctx, UIColor.whiteColor().CGColor)
CGContextSetLineWidth(ctx, 10)
CGContextAddRect(ctx, rectangle)
CGContextDrawPath(ctx, .FillStroke)
UIGraphicsEndImageContext()
// new way, Swift 3
if let ctx = UIGraphicsGetCurrentContext() {
let rectangle = CGRect(x: 0, y: 0, width: 512, height: 512)
ctx.setFillColor(UIColor.blue().cgColor)
ctx.setStrokeColor(UIColor.white().cgColor)
ctx.setLineWidth(10)
ctx.addRect(rectangle)
ctx.drawPath(using: .fillStroke)
UIGraphicsEndImageContext()
}
Capitalization on Enumeration Cases
Swift3 列舉的成員首字母變成了小寫
// old way, Swift 2, followed by new way, Swift 3
UIInterfaceOrientationMask.Landscape
UIInterfaceOrientationMask.landscape
NSTextAlignment.Right
NSTextAlignment.right
SKBlendMode.Multiply
SKBlendMode.multiply
具體請看[SE-0006]:
Methods that Return or Modify
方法字尾如果是“-ed” 或者 “-ing” ,那麼這個方法是個動詞,且有返回值。如果一個方法沒有字尾,那麼這個方法是個名詞,不返回值,只進行一些操作。
customArray.enumerate()
customArray.enumerated()
customArray.reverse()
customArray.reversed()
customArray.sort() // changed from .sortInPlace()
customArray.sorted()
var ages = [21, 10, 2] // variable, not constant, so you can modify it
ages.sort() // modified in place, value now [2, 10, 21]
for (index, age) in ages.enumerated() { // "-ed" noun returns a copy
print("\(index). \(age)") // 1. 2 \n 2. 10 \n 3. 21
}
Function Types
在之前的語法中,省略了圓括號讓引數在哪裡結束和返回值在哪裡開始變得很難懂
func g(a: Int -> Int) -> Int -> Int { ... } // old way, Swift 2
現在變成了這樣:
func g(a: (Int) -> Int) -> (Int) -> Int { ... } // new way, Swift 3
// old way, Swift 2
Int -> Float
String -> Int
T -> U
Int -> Float -> String
// new way, Swift 3
(Int) -> Float
(String) -> Int
(T) -> U
(Int) -> (Float) -> String
API Additions
增加了幾個有用的 API
Accessing the Containing Type
當你使用類方法或者類屬性時,之前都必須像這樣做:
CustomStruct.staticMethod()
現在可以使用首字母大寫的 Self
來代替以前的寫法,並且用類的例項也能呼叫類方法或者類屬性了:
struct CustomStruct {
static func staticMethod() { ... }
func instanceMethod()
Self.staticMethod() // in the body of the type
}
}
let customStruct = CustomStruct()
customStruct.Self.staticMethod() // on an instance of the type
Inline Sequences
有2個新方法sequence(first:next:)
和sequence(first:next:)
返回無窮大的順序序列,除非 next 返回 nil。
for view in sequence(first: someView, next: { $0.superview }) {
// someView, someView.superview, someView.superview.superview, ...
}
還可以使用prefix
來約束條件
for x in sequence(first: 0.1, next: { $0 * 2 }).prefix(while: { $0 < 4 }) {
// 0.1, 0.2, 0.4, 0.8, 1.6, 3.2
}
具體檢視 [SE-0045]:
Miscellaneous Odds and Ends
-
#keyPath()
和#selector()
類似,可以幫助你防止錯誤字在使用字串型別 API 時 - 使用
pi
可以獲得圓周率,具體請看 [SE-0067] - NS 字首被取消,
Date
替代NSDate
Improvements to Tooling
Swift3 提高了提示錯誤和警告資訊的精準度,並且他的執行和編譯速度也更快了:
- 通過改進字串 hashing 提高了3倍速度在字串字典中
- 通過將物件從堆移到棧中提高了24倍速度(在某些情況下)
- 編譯器可以一次快取很多檔案
- 減小了編譯後的大小
The Swift Package Manager
你也許會使用 Cocoapods 或者 Cocoapods,Swift 包管理將會下載依賴,編譯他們然後連結在一起來建立庫和可執行檔案。
Planned Future Features
Swift3 不會馬上包含 ABI。ABI 其實是一個二進位制介面,比 API 更底層,ABI 的作用就是不管 Swift 怎麼迭代,你還是可以一直使用老版本 Swift 編譯的第三方庫。
這篇文章同時釋出在我的 Git 上,這個專案我會更新一些平時學習的資源和筆記,有興趣的朋友可以 Watch 一下。
相關文章
- WWDC18 What’s New in LLVM 個人筆記LVM筆記
- What's new in Dubbo 3.1.4 and 3.2.0-beta.3
- What’s new in RxSwift 5Swift
- What's new of dubbogo v1.4Go
- What's New in MariaDB 10.4
- What’s new in Cassandra 1.0: Compression
- What's new in C# from 2.0 to 5.0C#
- What's New in the JMF 2.0 Reference Implementations (轉)
- What's new in dubbo-go-pixiu 0.4.0Go
- What’s New in TiDB 3.0.0-rc.1TiDB
- What's new in dubbo-go v1.5.6Go
- What's new in Dubbo-go v1.5.1Go
- What's new in Dubbo 3.1.5 and 3.2.0-beta.4
- iOS10新特性(What's New in iOS)iOS
- WWDC 201 What's new in cocoa touch
- VMware vSphere:What's New V5.1培訓
- swift學習筆記《3》-技巧Swift筆記
- new筆記筆記
- Chrome 63 - What's New in DevTools(中文字幕)Chromedev
- What's New in J2SE 1.5 ? -- Interview on Joshua Bloch (轉)ViewBloC
- [MetalKit]21-What's-new-in-graphics-and-games-at-WWDC-2016GAM
- What's the webmethodWeb
- swift dispatch 筆記Swift筆記
- Xcode8/Swift3 入坑筆記XCodeSwift筆記
- what is the new features of Flash CS5?
- swift 基礎筆記Swift筆記
- 在windows下使用s3cmd和s3browser來管理amazon s3的筆記Windowss3cmd筆記
- s3-api閱讀筆記(待整理)S3API筆記
- 2008 3 21:What's going to be covered on the test?Go
- swift學習筆記《2》-swift語法Swift筆記
- What’s Brewing for .NET DevelopersDeveloper
- 收藏What’s the Point of Oracle Checkpoints?Oracle
- swift學習筆記《1》Swift筆記
- swift學習筆記《4》Swift筆記
- Swift快速入門筆記Swift筆記
- 【讀書筆記】The Swift Programming Language (Swift 4.0.3)筆記Swift
- Swift學習筆記(3)iOS 9 中的網路請求Swift筆記iOS
- 【開發筆記】swift語法小記筆記Swift