В 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()
}
}
Когда я перенесу Swift 3 я получаю следующее сообщение об ошибке для этой строки кода
}as! (Data?, URLResponse?, Error?) -> Void)
exc_bad_instruction (код = exc_i386_invop субкода = 0x0)
Я знаю, что это имеет какое-то отношение к значениям nil и т. Д., Но я новичок в Swift и с тех пор, как я перешел на Swift 3 У меня возникло множество проблем с сортировкой мой код.
спасибо за обмен, такое легкое исправление освободило столько стресса =) – DG7