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

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

概述我正在做我认为非常简单的任务.如果密钥存在,我正试图从字典中获取值.我正在为字典中的几个键执行此 *** 作,然后创建一个对象(如果它们都存在)(基本上解码 JSON对象).我是语言的新手,但在我看来它应该可行,但不是: class func fromDict(d: [String : AnyObject]!) -> Todo? { let title = d["title"]? as? Stri 我正在做我认为非常简单的任务.如果密钥存在,我正试图从字典中获取值.我正在为字典中的几个键执行此 *** 作,然后创建一个对象(如果它们都存在)(基本上解码 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 – Swift可选项:语言问题,还是做错了什么?全部内容,希望文章能够帮你解决ios – Swift可选项:语言问题,还是做错了什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1099504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存