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以来我遇到了很多问题我的代码出来了。
感谢分享,这样简单的修复减轻了很多压力=) – DG7