2016-10-11 2 views
1

天気予報アプリケーションで作業していて、APIからデータを取得しようとしています。しかし、都市名を入力してEnterキーを押すと、Swiftは "Optional(455 bytes)"というメッセージを表示します。Swiftが "Optional(455 bytes)"を印刷する理由

import Foundation 

protocol WeatherServiceDelegate{ 
    func setWeather(weather:Weather) 
} 

class WeatherService{ 
    var delegate: WeatherServiceDelegate? 

    func getWeather(city: String){ 
     let path = "http://api.openweathermap.org/data/2.5/weather?q=Boston" 
     let url = URL(string: path) 

     let task = URLSession.shared.dataTask(with: url!) { (data:Data?, response: URLResponse?, error: Error?) in 
      print(data) 
     } 

     task.resume() 

答えて

2

は何も悪いことはありません、あなたは、iOSのを印刷されてやろうとしているどのようなタイプData?

あなたはむしろそれを復号した後の応答をチェックする必要があるのオプションの変数dataからDataをコードしていました。

乾杯!

+0

あなたは私がAPIから生データを得ると思った。私はただばかげていた。ありがとうございます – martinko2499

+0

あなたは非常に歓迎されたメイト、乾杯! –

+0

どのように応答を確認しますか? – Martian2049

0

dataは任意タイプのData?です。スウィフトでは、このようoptionalsのラップを解除することができます。これは、if文データ内もはやオプションタイプで、タイプDataであることを意味しません

if let data = data { 
     print(data) 
    } 

。展開されていないので、コンソールに "Optional()"というテキストは表示されません。

0

これで、データに値を割り当てるので、残りの確率= nilを除外します。だからあなたはデータを使うことができます!自動的に値アンラップする:

let task = URLSession.shared.dataTask(with: url!) { (data:Data?, response: URLResponse?, error: Error?) in print(data!) }

0

ああので、ここで復号部だが、ケースには誰もがまだそれを探しています。

if let data = data, 
     let urlContent = NSString(data: data, encoding: String.Encoding.ascii.rawValue) { 
     print(urlContent) 
    } else { 
     print("Error: \(error)") 
    } 
関連する問題