一般 Apple 的做法是新的 IDE 才會支援新的語法或是平台,所以要測試就拿新的 Xcode 7 來測試一下
不過在測試之前要先來討論一下,用 Xcode 6 開發 和用 Xcode 7 開發差別在哪?
對於開發者而言,最重要的事情就是 Xcode 可以支援的平台 OS 是幾版到幾版?
以 Apple 的做法來說,非常舊版本的 Xcode。以這次 iOS 9 的更新來說我用 Xcode 6 就無法把 App 部署到 iOS 9 的 Device 上面,所以來比較一下可以部署的平台
用 Xcode 7 打開一個專案如下可以看到
圖片無法 Copy 到下方的版本,Xcode 7 可以支援的就是
iOS 6.0 - 9.1
另外再來看一下 Xcode 6.4
同樣的地方
會看到是
iOS 6.0 - 8.4
換句話說,如果要寫 App 支援 iOS 6.0 之前的版本, Xcode 6.4也不能部署
要開發 iOS 9 請用 Xcode 7
接著回到正題,拿一個現成的 Project 來轉看看 這個 App 操作方式如下
https://www.youtube.com/watch?v=gIyhpRXP8so
先用 Xcode 7 打開
就會看到轉換成最新 Swift 語言的提示
接著按下一步
接著選擇要檢視的 Target
PS. 如果沒有自動出現的話可以手動啟動這個 Convert 機制如下圖
接著就會出現比較的畫面,我們一一來看一下
第一個我們看到的不一樣
Swift 2.0 之後,都用 print() 來取代之前的 print() 和 println()
差別在 2.0 的
print()
代表 1.x 的
println()
而 1.0 的
print()
在 2.0 要寫成
print("Hello", terminator: "")
或者你也可以想成 2.0 的
print()
其實是
print("Hello", terminator: "\n")
的簡寫
接著看下一個
這點是如果 var some = "Hello",對於 some 這個變數,如果之後的程式碼沒有用到,Xcode 就會強烈建議把 var 改成 let ,也就是會自動把
var some = "Hello"
轉成
let some = "Hello"
接著看下一個
這個原因是
在 1.x 的時候,有一個
name 的型別是 Stringvar name:String = "Michael"
如果我們想要用 for-in 走訪這個 string 把大寫的字找出來
在 1.x 會這樣寫
for c:Character in name {
var str = "\(c)"
if str == str.uppercaseString {
print("\(str) is uppercase ")
}
}
直接把 name 好像當成集合用,
而在 2.0 會改成
for c:Character in name.characters {這樣比較合理一點,用 characters 來回傳一個由 Character 所組成的 Array 用 for-in來 iterate 所有的元素
var str = "\(c)"
if str == str.uppercaseString {
print("\(str) is uppercase ")
}
}
有學員提供這個問題
在 1.x 的時候這樣寫
var urlStr = "http://www.apple.com"
var iphoneURL = urlStr.stringByAppendingPathComponent("iphone")
stringByAppendingPathComponent 本來是 NSString 常用的 method
Swift 的 String 也是可以用
但是這樣 urlStr 裡面是 http:// 開頭的,也就是意圖要處理一個 URL
此時用 Xcode 7 打開,Convert 到新的 Syntax 就會出現下圖
也就是目前 Xcode 7 建議先轉成 NSString 再做 stringByAppendingPathComponent
這樣一來可以正常的執行
如果不聽,在 Xcode 7 就會直接給錯誤如下圖
它就直接出現錯誤,stringByAppendingPathComponent 不可以在 String 用了,建議用 NSURL 來處理 path component 的問題
String 的 toInt() 被拿掉了如下圖
在 2.0 如果要把數字集合而成的 String 轉成 Int 要就要用 Int 的 constructor
Int("12345")
/* by MusiCabbage */
好康道相報!! SequenceType 本來一些
例如說,本來我們想知道Array中有沒有某個Object,
必需這樣寫…
var array = ["a", "b", "c", "d", "e"]
contains(array, "a")
在 swift 2.0 的世界裡,我們只需要這樣寫…
array.contains("a")
類似的做法,CollectionType 裡面那些
以前如果想要找到某個Object在Array中的Index,
是這樣寫…
var index = find(array, "c")
在 swift 2.0,完全換了個方法,但更容易懂了…
array.indexOf("c")
持續更新中