ios - 如何从外部源更新 uitextview。

标签 ios swift uikit uitextview swift-playground

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

Unexpectedly found nil while unwrapping an Optional value

如果我注释掉它运行的 vw.updateTerm(...) 行。最终,我想使用从 BLE 和/或 http 请求更新的数据来更新 uitextview。任何帮助或指导将不胜感激。

我的 Playground 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

最佳答案

问题是 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 .

关于ios - 如何从外部源更新 uitextview。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474898/

相关文章:

ios - 判断UIView是否被其他view覆盖?

ios - 解析登录和注册功能 SWIFT

ios - 刷新 UIPageViewController - 重新排序页面并添加新页面

ios - 使用 NS[UI]ScrollView 操作投影

ios - 在 Swift、iOS 8,9 中应用前景时推送本地通知

ios - 协议(protocol)扩展中的默认值

css - 我在 iOS 中的网站上的填充过多

xcode - geocoder.geocodeAddressString 今天不再适用于快速更新

swift - 自动布局和 Storyboard不起作用 - Swift?

iphone - iOS 按住手势 + 点击