可选链接与不同的对象

时间:2014-12-13 21:21:11

标签: ios swift

我正在学习可选项,但我找不到一个例子:如何从不同的对象中链接选项。

我的代码:

let apiKey = "MY_SECRET_API_KEY"

let baseURL = NSURL(string: "https://api.forecast.io/forecast/\(apiKey)/")

if  let forecastURL = NSURL(string: "41.155099,-8.678774", relativeToURL: baseURL){
    if let weatherData = NSData(contentsOfURL: forecastURL, options: nil, error: nil){
        if let json = NSString(data: weatherData, encoding: NSUTF8StringEncoding){
            println(json)
        }

    }
}

我不想在我的代码中使用!,只是在可读性方面。我怎么能像这个伪代码那样编码:

if forecast = ... && weatherData=... && json=...{
    println(json)
}

如果您认为我应该坚持使用!,我可以了解其优势。

1 个答案:

答案 0 :(得分:0)

考虑以下编码风格:

let apiKey = "MY_SECRET_API_KEY"

let baseURL: NSURL! = NSURL(string: "https://api.forecast.io/forecast/\(apiKey)/")
if baseURL == nil {
    // handle error
    return /*error*/
}

let forecastURL: NSURL! = NSURL(string: "41.155099,-8.678774", relativeToURL: baseURL)
if forecastURL == nil {
    // handle error
}

let weatherData: NSData! = NSData(contentsOfURL: forecastURL, options: nil, error: nil)
if weatherData == nil {
    // handle error
}

let json: NSString! = NSString(data: weatherData, encoding: NSUTF8StringEncoding)
if json == nil {
    // handle error
}

println(json)

它可能看起来很冗长,但它保持缩进级别,它“缩放”到多个语句,在我看来它非常易读。

如果您确定不会发生某些错误,则可以跳过错误处理。