swift - 即使在同一个视图控制器中,swift也无法在范围内找到文本字段
问题描述
txtField
单击按钮后,我需要打印值,txtField
在 viewcotroller 上,但 xcode 返回错误cannot find 'txtField' in scope
,但它们在同一个视图中
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
button.backgroundColor = .green
button.setTitle("Test Button", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
var txtField: UITextField = UITextField()
txtField.frame = CGRect(x: 50, y: 70, width: 200, height: 30)
txtField.backgroundColor = UIColor.gray
self.view.addSubview(txtField)
}
@objc func buttonAction(sender: UIButton!) {
print(txtField.text)
}
解决方案
实际上,不,它不在范围内。你var txtField
在viewDidLoad
函数里面。没有其他函数的代码可以在此函数内部看到,因此该变量不在另一个函数(例如您的buttonAction
.
一般来说,范围内的事物只能看到更高范围内的事物的规则。如果var txtField
出现在两者viewDidLoad
之外buttonAction
(即实例属性),那么两者中的代码将能够看到它。
这是一个简单的举动:
var txtField: UITextField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(frame: CGRect(x: 100, y: 100, width: 100, height: 50))
button.backgroundColor = .green
button.setTitle("Test Button", for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
self.view.addSubview(button)
txtField.frame = CGRect(x: 50, y: 70, width: 200, height: 30)
txtField.backgroundColor = UIColor.gray
self.view.addSubview(txtField)
}
@objc func buttonAction(sender: UIButton!) {
print(txtField.text)
}
推荐阅读
- java - ndk-build 错误,字符串格式,clang 没有这样的文件或目录
- android - 错误的表格布局重量
- javascript - 包括 FileReader.onload 在内的 Angular 单元测试不适用于 async/whenStable 和 fakeAsync/tick
- ibm-watson - 如何在 ibm watson 语音到文本的 android sdk 中使用 audiofilewritter?
- cordova - 使用cordova获取设备令牌(iphone)并实现推送通知
- php - Laravel 两种 404 样式
- python - 与报价处理完全混淆
- r - 如何一起显示来自visNetwork的节点和边的闪亮输入而不是单独显示
- javascript - 如果我更改端点,中间件将不起作用
- javascript - 如果视频正在加载(缓冲),则显示带有加载 GIF 图像的 HTML5 视频