2016-11-29 56 views
0

在Xcode 7(和Swift 2)上,以下代码工作正常。它的功能是获取当前观察值的天气API json字符串,然后解析字符串并找到UV值。 (我知道它很混乱,但我无法让JSON解析我的头)。不要介意我将字符串拆分成越来越小的数组。什么是错的是在代码段的底部:迁移到Swift 3 - 在URL会话期间获取以下错误

class weatherGetter { 
    fileprivate let weatherMapBaseURL = "https://api.wunderground.com/api/" 
    fileprivate let weatherAPIKey = "************" 

    func getWeather(city: String) { 
     // This is a pretty simple networking task, so the shared session will do. 
     let session = URLSession.shared 
     let weatherRequestURL = URL(string: "\(weatherMapBaseURL)\(weatherAPIKey)/conditions/q/FL/\(city).json")! 

     let dataTask = session.dataTask(with: weatherRequestURL, completionHandler: { 
      (data: Data?, response: URLResponse?, error: NSError?) in 
      if let error = error { 
       // Case 1: Error 
       // We got some kind of error while trying to get data from the server. 
       print("Error:\n\(error)") 
      } 
      else { 
       do { 
        // Try to convert that data into a Swift dictionary 
        let dataString = String(data: data!, encoding: String.Encoding.utf8) 
        print("Human-readable data:\n\(dataString!)") 
        let fullArr = dataString!.characters.split{$0 == "\n"}.map(String.init) 

        let smallArr = String(fullArr[79]).characters.split{$0 == ":"}.map(String.init) 

        let smallerArr = String(smallArr[1]).characters.split{$0 == ","}.map(String.init) 
        //let smallerArr2 = String(smallArr[1]).characters.split{$0 == ","}.map(String.init) 
        //let characters = Array(smallerArr) 
        //print(smallerArr[0]) 
        let final = String(smallerArr[0]) 
        //print(final) 
        let charArr = Array(final!.characters) 
        //print(charArr) 
        let subarray = charArr[1...charArr.count-2] 
        let finalNum = String(subarray) 
        let myDouble = Double(finalNum) 
        var myDouble2: Double = myDouble! 
        print(myDouble2) 
        Calculator_Calculations.sharedInstance.uvIndex = myDouble2 
        print(Calculator_Calculations.sharedInstance.uvIndex) 
        //print(String(subarray)) 
        //print(finalNum) 
        //print(myDouble) 
       } 
       // Case 2: Success 
       // We got a response from the server! 
       //let dataString = String(data: data!, encoding: NSUTF8StringEncoding) 
       //print("Human-readable data:\n\(dataString!)") 
      } 
     } as! (Data?, URLResponse?, Error?) -> Void) 

     // The data task is set up...launch it! 
     dataTask.resume() 
    } 
} 

当我迁移到斯威夫特3,我得到了这行代码

}as! (Data?, URLResponse?, Error?) -> Void) 

exc_bad_instruction(代码= exc_i386_invop子码下面的错误= 0x0)

我知道这与零值等有关,但我是新的enugh Swift,并且自从我迁移到Swift 3以来我遇到了很多问题我的代码出来了。

回答

1

我从NSError中删除了NS,并将其更改为Error并且代码运行良好。

+0

感谢分享,这样简单的修复减轻了很多压力=) – DG7