Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从外部源更新uitextview。_Ios_Swift_Uikit_Uitextview_Swift Playground - Fatal编程技术网

Ios 如何从外部源更新uitextview。

Ios 如何从外部源更新uitextview。,ios,swift,uikit,uitextview,swift-playground,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

我希望能够通过调用视图中的方法来更新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

问题是当您尝试
updateTerm
时,
loadView
仍然没有被调用,这意味着对于
vw
实例,
textView
loadView
中是
nil

只要
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选项,它对运行时错误非常有效。我添加了几行,如下添加到我的文本视图中,它会更新,但文本永远不会显示到显示的文本视图中。[code]print(vw.textView.text)vw.updateTerm(textToUpdate:“\n你去哪里2”)print(vw.textView.text)“code”添加了这些代码行。我似乎有两个textView实例,因为在操场上它附加到一个实例,但不在显示的那个实例上。我需要在课堂上做更多的事情吗?
vw.updateTerm(textToUpdate:\n你去哪里)print(vw.textView.text)vw.updateTerm(textToUpdate:\n你去哪里2”)print(vw.textView.text)
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)
}