ios – Swift可选项:语言问题,还是做错了什么?

前端之家收集整理的这篇文章主要介绍了ios – Swift可选项:语言问题,还是做错了什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做我认为非常简单的任务.如果密钥存在,我正试图从字典中获取值.我正在为字典中的几个键执行此操作,然后创建一个对象(如果它们都存在)(基本上解码 JSON对象).我是语言的新手,但在我看来它应该可行,但不是:
class func fromDict(d: [String : AnyObject]!) -> Todo? {
    let title = d["title"]? as? String
    // etc...
}

它给了我错误:postfix的操作数?应该有可选的类型; type是(String,AnyObject)

但是,如果我这样做,它的工作原理:

class func fromDict(d: [String : AnyObject]!) -> Todo? {
    let maybeTitle = d["title"]?
    let title = maybeTitle as? String
    // etc...
}

它似乎是基本的替代,但我可能会遗漏一些语言的细微差别.谁能对此有所了解?

解决方法

推荐的模式是
if let maybeTitle = d["title"] as? String {
    // do something with maybeTitle
}
else {
    // abort object creation
}

这可能是一个细微差别的问题.表格数组[下标]?是不明确的,因为它可能意味着整个字典(< String:AnyObject>)是可选的,而你可能意味着结果(字符串).在上面的模式中,您利用了Dictionary设计为假设以可选类型访问某些键结果的事实.

经过实验,并注意到了?之后就像暧昧一样,更多,这是我的解决方案:

var dictionary = ["one":"1","two":"2"]
// or var dictionary = ["one":1,"two":2]
var message = ""
if let three =  dictionary["three"] as Any? {
    message = "\(three)"
}
else {
    message = "No three available."
}
message // "No three available."

这适用于所有非对象Swift对象,包括Swift字符串,数字等.感谢Viktor提醒我String不是Swift中的对象.

如果您知道值的类型,您可以替换任何?使用适当的可选类型,如String?

猜你在找的iOS相关文章