我有一个视图控制器,该控制器具有以编程方式创建的标签,如下所示。
class MyController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .white
setupUI()
}
func setupUI() {
// added an setup the view constraints.
}
}
这正常工作。然后,我尝试通过创建如下扩展来将视图控制器的所有UI元素移至其扩展:
private extension MyController {
var label: UILabel = {
**// tried to initialize the label like this. but getting cannot use stored property in extension error**
}()
// then tried like below
var mylabel: UILabel! {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello"
return label
}
func setupUI() {
// with the second option I getting nil value error.
}
}
如何以编程方式初始化Viewcontroller扩展中的UI元素以进行内部访问。
答案 0 :(得分:1)
尝试一下:
uielements.swift
extension MyController {
static let myLabel: UILabel = {
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.text = "Hello"
return label
}()
}
myController.swift
class MyController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupUI()
}
private func setupUI() {
view.addSubview(RootVC.myLabel)
// Add layout constraints here
}
}
答案 1 :(得分:0)
错误提示,不允许在扩展中声明变量。
您提到要在 扩展名。当然可以。但是,您所拥有的 扩展不仅是初始化的声明。
在控制器中具有声明,在扩展方法中具有初始化。