2016-11-29 10 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() 
    } 
} 

Когда я перенесу Swift 3 я получаю следующее сообщение об ошибке для этой строки кода

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

exc_bad_instruction (код = exc_i386_invop субкода = 0x0)

Я знаю, что это имеет какое-то отношение к значениям nil и т. Д., Но я новичок в Swift и с тех пор, как я перешел на Swift 3 У меня возникло множество проблем с сортировкой мой код.

ответ

1

Я удалил NS из NSError и сменил его только на ошибку и код прошел нормально.

+0

спасибо за обмен, такое легкое исправление освободило столько стресса =) – DG7