iOS swift2.3 遷移到3.0 遇到的一些問題

我的時代我來創發表於2017-12-13

       在swift2.3的時候,因為專案需求,需要做一個能夠根據加速度來得到你行走的計步器,然後做完計步器,每走一步路後,通過跳轉,跳到主執行緒進行畫圖畫點。

       然而最近一段時間,電腦更新到了Xcode8.0 ,一下子就能用swift3.0了,想到swift3.0官方說明是可以進行版本繼承的,所以就將計步器改成3.0版本,但是遇到了以下的一些問題:

以下由這個幾個錯誤組成:

錯誤一: (data[0] as AnyObject) .doubleValue

錯誤原因: '(AnyObject)' is not a subtype of 'NSNumber'

錯誤二:userInfo: nil

錯誤原因: Extra argument 'userInfo' in call

錯誤三: for  i = 4 ; i < len-1 ; i += 1

錯誤原因:C-style for statement has been removed in Swift 3

錯誤四: aez = (Double)((userAccelerationx*orientationycos*orientationzsin)-(userAccelerationy*orientationysin)+(userAccelerationz*orientationycos*orientationzcos))

錯誤原因:: Expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions


第一個錯誤是在型別轉換時遇到的錯誤,原來現在的版本資料型別可以直接將double放在最前面,然後要加上資料型別,應該改成以下幾個版本:

(data[0]as!NSNumber) .doubleValue

Double(self.acclerometerdata[0]as!NSNumber)

Double((self.acclerometerdata[0]asAnyObject)as!NSNumber)

以上的三種寫法都是正確的。

第二個錯誤是在寫通知時遇到的錯誤:

原先的通知寫法是:

NotificationCenter.defaultCenter.postNotificationName("Notificationaddstteps",object: self, userInfo: ["value3":5])

以上寫法是swift2.3版本寫法,swift3.0不支援,需要改成下面版本寫法:

NotificationCenter.default.post(name: NSNotification.Name(rawValue:"Notificationaddstteps"), object:self, userInfo:["value3":5])

第三個錯誤是,因為版本改變出現了一些變化:

Swift 3.0更加規範化,當專案從Swift 2.0升級至Swift 3.0時,需要注意以下幾點:

1、方法的引數標籤不可省略,從第一個引數就必須指定引數名,除非使用"_"明確指出省略引數;

2、列舉值的首字母統一為小寫;

3、Swift 3.0取消了C風格的for迴圈,for var i = 0 ;i < 10 ; i += 1語句變更為:for i in 0 ..< 10

4、列舉成員首字母變成小寫;

5、按鈕的Normal狀態去掉,按鈕狀態UIControlState()相當於原來的.Normal;

6、取消++、--操作符;

7、方法名使用動詞,其他名詞、介詞等作為引數或移除

所以需要使用for i in 0 ..< 10 這種方法了。

第四個錯誤是因為它現在似乎不支援超長資料的轉換,我將它進行一個一個資料轉換久可以成功執行了,及改成如下版本:

aez = (Double)(userAccelerationx*orientationycos*orientationzsin)-Double(userAccelerationy*orientationysin)+Double(userAccelerationz*orientationycos*orientationzcos)

就不會報錯。

更加具體的swift3.0 可以看官方文件:swift.org/blog/swift-…

現在版本Xcode8.0和 iOS10可以看看下面大家整理的資料:

cc網總結帖:[總結帖]關於升級xcode8

iOS10整理資料:ios.jobbole.com/89028/

相關文章