将字符串设置为可选值的问题

时间:2015-05-18 09:17:19

标签: ios swift optional

如何将按钮内的标签传递给下一个活动

这是我的代码,但它不起作用

@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是一个字符串

任何人都可以帮助我,我想做的就是将按钮内的标签点击到下一个视图控制器

2 个答案:

答案 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,也可以不是。)