如何从外部源更新uitextview。

时间:2017-01-04 23:21:34

标签: ios swift uikit uitextview swift-playground

我希望能够通过在我的视图中调用方法来更新我的uitextview。使用此代码,我收到运行时错误:

Unexpectedly found nil while unwrapping an Optional value

如果我注释掉它运行的vw.updateTerm(...)行。最后,我想用从BLE和/或http请求更新的数据更新uitextview。任何帮助或指示都将非常受欢迎。

我的游乐场swift 3代码如下所示:

import UIKit
import PlaygroundSupport

public class TextViewController : UIViewController {

    public var textView : UITextView!

    override public func loadView() {
        textView = UITextView()
        textView.text = "Hello World!\nHello Playground!"

        self.view = textView
    }

    func updateTerm(textToUpdate: String) {
        self.textView.text.append(textToUpdate)
    }
}

let vw = TextViewController()
vw.updateTerm(textToUpdate: "here you go")

PlaygroundPage.current.liveView = vw

1 个答案:

答案 0 :(得分:0)

问题是,当你尝试loadView时,仍然没有调用updateTerm,这意味着textViewnilloadView } vw实例。

textView声明为强制解包属性而言,任何在nil(如您的情况下)中使用它的尝试都将导致运行时错误。

你应该使它成为常规选项:

public var textView : UITextView?

override public func loadView() {
    textView = UITextView()
    textView?.text = "Hello World!\nHello Playground!"
    self.view = textView
}

func updateTerm(textToUpdate: String) {
    self.textView?.text.append(textToUpdate)
}

或者,例如,懒惰的属性(如果适合你的话):

lazy public var textView = UITextView()

override public func loadView() {
    textView.text = "Hello World!\nHello Playground!"
    self.view = textView
}

func updateTerm(textToUpdate: String) {
    self.textView.text.append(textToUpdate)
}

可以找到更多信息here