为什么我的UILabelvariables总是零?

我只是试图在Swift中连接一个variables与UILabel。 我已经看了很多教程,但我不断收到错误。 主要原因似乎是@IBOutlet weak var str = UILabel! 总是零。 当我尝试给它分配一个值时,控制台打印一个fatal error: unexpectedly found nil while unwrapping an Optional value并在编码接口,行self.stringLabel.text = self.string突出显示错误Thread 1: EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0 。这是我的代码:

 @IBOutlet weak var stringLabel: UILabel! var string: String! override func viewDidLoad() { self.stringLabel.text = self.string super.viewDidLoad() } @IBAction func buttonClick(sender: UIButton) { self.stringLabel.text = "Button clicked!" } 

我试图围绕variables对.self.text不同的定位,并没有成功。 我在正确的轨道上? 而且,如果是这样,我做错了什么? 如果我完全错了,如何将标签的文本设置为variables的文本? 非常感谢你提前。

编辑:我已经将故事板中的标签连接到@IBOutlet

Ë

问题是variablesstringnil

隐式解包可选( ! )在使用时必须为非零。

试试真实的东西:

 var string = "Hello there" 

stringLabel属性没有连接到Interface Builder

您必须将Interface Builder中的UILabel对象连接到Swift代码中的属性。

  1. 在Xcode中,代表您的UI和Swift View控制器的xib / storyboard并排开放
  2. 按住键盘上的ctrl
  3. 将指针移到Interface Builder中的UILabel对象上
  4. 按指针button
  5. 将指针从UILabel (Interface Builder) UILabel! 部分在您的声明@IBOutlet weak var stringLabel: UILabel! 在你的Swift源代码中

在这里输入图像说明

而已。

Cocoa会照顾你的UILabel,如果你在接口构build器中连接它(确保是这种情况),但是你的string对象是未初始化的,你必须使用var string: String = ""或者如果你想使用一个可选的var string: String? = "" var string: String? = ""

你可以在全局范围内做到这一点,但我build议你所有的视图控制器都有一个init()方法来分配这些东西。

编辑:我试图重现这个问题,但我得到了预期的结果。 这是我的视图控制器的代码

 import UIKit class ViewController: UIViewController { @IBOutlet weak var testLabel: UILabel! var string: String! required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) string = "Hello World" } override func viewDidLoad() { self.testLabel.text = self.string super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } 

在这里输入图像说明