Swift NSObject属性不是可选的,但它打印可选

时间:2017-04-05 05:10:17

标签: ios swift forced-unwrapping

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

上述代码的输出是:

  

所有地方可选("地铁")

在下面的代码中,var不是可选的。但print语句将其打印为Optional。是否打印所有地点"地铁"

class Places: NSObject {


    var name:String!


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

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

3 个答案:

答案 0 :(得分:0)

将其更改为

    class Places: NSObject {


        var name:String!


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

            name = dictionary["name"] as! String
        }

}

答案 1 :(得分:0)

改变&#39; as?&#39;到了&#39;。

  • 感叹号意味着它绝对清晰。

  • 问号表示可选绑定。

<强> [来源]

your name example=form2.

form2 obj=new form2();

obj.show();

另一种方式

form1.visible=false;

form1.Hide();

答案 2 :(得分:0)

var name:String!

您已声明名称为隐式展开的可选项。从Swift 3开始,如果需要在本地进行类型检查将仅强制解包。否则,它将被视为正常的可选项。

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

这里没有涉及类型检查,因此名称仍然是可选的。

如果你喜欢

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

输出将是“All Places Subway”

或者你需要强行打开它

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

如果name为零,这会导致崩溃,你应该照顾它。如果有可能名称为nil则使用var name: String?,因此编译器会强制您明确解包。