如何将按钮内的标签传递给下一个活动
这是我的代码,但它不起作用
@IBOutlet weak var elecB: UIButton!
我的prepareForSegue代码
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var result:searchResultView = segue.destinationViewController as! searchResultView
if elecB.selected{
result.cat = elecB.titleLabel?.text!
}
}
它告诉我这行代码中有错误
result.cat = elecB.titleLabel?.text!
cat是一个字符串
任何人都可以帮助我,我想做的就是将按钮内的标签点击到下一个视图控制器
答案 0 :(得分:2)
将titleLabel
的声明更改为titleLabel: UILabel!
或titleLabel: UILabel
,因为您实际上并不需要它是可选的。听起来你有理由期待这个标签一直存在。
使cat
可选也不是最佳解决方案,因为您希望该字符串始终具有值。因此请保持原样cat
,如果Xcode抱怨,请将标题标签设为非可选项,或隐式展开(!
)。
?
和!
的含义是什么?声明后?
表示该变量为可选,并且可以合理地排除为nil
(这也允许您将其设置为{{1} }})。每次要使用nil
时,您还必须使用?
跟随变量名,或将其包装在if let a = myOptionalVar {...}
中,这样代码只有在变量不是{{}时才会执行1}}
声明后的nil
使其成为隐式展开的可选。这意味着变量可以是!
,但在大多数情况下假设不是nil
,所以你没有每次要使用nil
时都要跟随它。但是请注意,如果在尝试使用变量时碰巧变为nil,则程序将崩溃。
!
只应在必要时使用,因为它本质上是不安全的。例如,如果Interface Builder要求!
变量是可选的,最好将它们设为@IBOutlet
,因为当从故事板创建类时,它们将自动初始化,并且具有剩下的时间。
使用这两个都不意味着变量不是可选的,即它必须始终具有值,并且不能是!
。
答案 1 :(得分:0)
查看Swift文档以获取可选变量的定义(声明末尾的?)。
如果您定义类似此var cat:String?
的变量,则该变量是可选的。这实际上意味着变量可以将nil作为值。
来自Apple的文档: 在可能缺少值的情况下使用选项。一个可选的说: - 有一个值,它等于x 要么 - 根本没有价值
下面的示例使用toInt()方法尝试将String转换为Int:
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
// convertedNumber is inferred to be of type "Int?", or "optional Int"
因为toInt()方法可能会失败,所以它返回一个可选的Int,而不是Int。可选的Int写为Int ?,而不是Int。问号表示它包含的值是可选的,这意味着它可能包含一些Int值,或者它可能根本不包含任何值。 (它不能包含任何其他内容,例如Bool值或String值。它可以是Int,也可以不是。)