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

Issues setting string to optional value

如何将按钮内的标签传递给下一个activity,

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

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

任何人都可以帮助我,我只想将单击的按钮内的标签传递给下一个视图控制器

titleLabel 的声明更改为 titleLabel: UILabel!titleLabel: UILabel,因为您实际上不需要它是可选的。听起来您有理由期望该标签一直存在。

使 cat 可选也不是最好的解决方案,因为您希望该字符串始终具有值。因此,保持 cat 不变,并使您的标题标签 non-optional,或者如果 Xcode 抱怨,则隐式展开(!)。

?! 是什么意思?

声明后的 ? 表示该变量是 可选的 ,并且可以合理地排除为 nil (这也允许您设置它到 nil)。每次要使用它时,您还必须在变量名后跟一个 ?,或者将它包装在一个 if let a = myOptionalVar {...} 中,这样代码 只会在变量不存在时执行nil.

声明后的 ! 使其成为 implicitly-unwrapped 可选 。这意味着变量 可以是 nil,但在大多数情况下 假设 不是 nil,所以你不必在每次要使用它时都在后面加上 !。但是请注意,如果当您尝试使用该变量时恰好为 nil,您的程序将崩溃。

! 只应在绝对必要时使用,因为它本质上是不安全的。例如,如果 Interface Builder 要求 @IBOutlet 变量是可选的,那么最好将它们设置为 !,因为它们会在您的 class 从故事板创建时自动初始化,并将在剩下的时间里都有价值。

两者都不使用意味着该变量不是可选的,即它必须始终有一个值,并且不能是nil.

查看 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() 方法可能会失败,所以它 returns 是一个可选的 Int,而不是一个 Int。一个可选的 Int 写成 Int?,而不是 Int。问号表示它包含的值是可选的,这意味着它可能包含一些 Int 值,或者它可能根本不包含任何值。 (它不能包含任何其他内容,例如 Bool 值或 String 值。它要么是 Int,要么什么都不是。)