为什么我的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
Ë
问题是variablesstring
是nil
。
隐式解包可选( !
)在使用时必须为非零。
试试真实的东西:
var string = "Hello there"
stringLabel属性没有连接到Interface Builder
您必须将Interface Builder中的UILabel
对象连接到Swift代码中的属性。
- 在Xcode中,代表您的UI和Swift View控制器的xib / storyboard并排开放
- 按住键盘上的ctrl键
- 将指针移到Interface Builder中的UILabel对象上
- 按指针button
- 将指针从
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. }