0
let allPlaces = resultsArray.map({ (param) -> Places in
                        return Places(dictionary: param )
                    })
                    print("All Places \(allPlaces[0].placeName)")

上述代码的输出是:

所有地方可选(“地铁”)

在下面的代码中, var 不是可选的。但是 print 语句将其打印为可选。它不应该打印所有地方“地铁”吗?

class Places: NSObject {


    var name:String!


    init(dictionary:Dictionary<String, Any>) {

        name = dictionary["name"] as? String
    }
}
4

2 回答 2

0
var name:String!

您已将 name 声明为隐式展开的可选。从此以后Swift 3只有在需要在本地进行类型检查时才会强制解包。否则,它将仅被视为普通可选。

 print("All Places \(allPlaces[0].name)")

这里没有涉及类型检查,所以 name 仍然是可选的。

如果你喜欢

let name:String = allPlaces[0].name
print("All Places \(name)")   

输出将是“所有地方地铁”

或者你需要强制打开它

 print("All Places \(allPlaces[0].name!)")

如果name为 nil,这将导致崩溃,您应该注意它。如果有机会 name 可以是 nil ,那么使用var name: String?所以编译器强制你显式地解包。

于 2017-04-05T05:53:56.967 回答
-1

改变'作为?'作为!'。

  • 感叹号表示绝对清楚。

  • 问号表示可选绑定。

[资源]

class Places: NSObject {


    var name:String!


    init(dictionary:Dictionary<String, Any>) {

        name = dictionary["name"] as! String 

    }
}

另一种方式

print("All Places \(allPlaces[0].placeName)")

print("All Places \(allPlaces[0].placeName!)")

or

print("All Places \(allPlaces[0].placeName ?? "")")
于 2017-04-05T05:16:06.220 回答