我在学习XCode7.3。 “?”和“!”总是让我感到困惑。
我的代码如下。
行name : name
,type : type
和image : image
显示错误消息:
可选类型'String?'的值没打开,你的意思是用'!'还是'?'?
@IBAction func unwindToHomeScreen( segue : UIStoryboardSegue ) {
if let addRestaurantController = segue.sourceViewController as? AddRestaurantController {
let name = addRestaurantController.name
let location = addRestaurantController.location
let type = addRestaurantController.type
let isVisited = addRestaurantController.isVisited
let image = addRestaurantController.imageView
restaurants.append( Restaurant(
name : name,
type : type,
location : location,
phoneNumber : "UNKNOW",
image : image,
isVisited : isVisited? ?? false
) )
print( addRestaurantController.imageView )
}
}
我将代码修改为name : name!
或name : name?
,但仍无效。我该如何解决?
答案 0 :(得分:0)
我认为这可以解决您的问题。
如果addRestaurantController.location
,addRestaurantController.name
和addRestaurantController.type
是可选的。
@IBAction func unwindToHomeScreen( segue : UIStoryboardSegue ) {
if let addRestaurantController = segue.sourceViewController as? AddRestaurantController , name = addRestaurantController.name, location = addRestaurantController.location, type = addRestaurantController.type, isVisited = addRestaurantController.isVisited, image = addRestaurantController.imageView
{
restaurants.append( Restaurant(
name : name,
type : type,
location : location,
phoneNumber : "UNKNOW",
image : image,
isVisited : isVisited? ?? false
) )
}
}
您尚未指定addRestaurantController.location
,addRestaurantController.name
和addRestaurantController.type
是否可选。并且您在没有正确分析的情况下随机提交了您的问题。
请为其他人的时间赋予更多价值。并提出有意义的问题。详细了解Stackoverflow
问题的指南。
答案 1 :(得分:0)
可能没有什么理由,但首先我建议您阅读选项(?
)并明确解开选项(!
)此处https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11
就问题而言,name
中变量Restaurant
的可选性很可能与本地定义的定义不同。虽然局部变量名称被定义为可选的,例如, let name: String?
,Restaurant
期望它不是可选的(可能定义为let name: String
(最后请注意没有?
))。这意味着您需要解包可选值以将其传递给Restaurant
(请参阅上面的链接以了解解包的方法,根据您的使用情况,很少有)
如果要切换到Swift 3,请记住显式解包的选项的行为已更改。有关动机和深度描述,请阅读此提案https://github.com/apple/swift-evolution/blob/master/proposals/0054-abolish-iuo.md
但是有人指出,Swift 3无法在Xcode 7中编译,你需要下载Xcode 8的beta版