我正在嘗試將 UILabel.text 設定為一個位于 coredata 中的字串,但是我收到一個錯誤訊息:有Instance member "test1" cannot be used on type 'ProfileViewController' did you mean to use a value of this type instead?什么解決方案嗎?
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
test1 = data.value(forKey: "username") as! String
}
} catch {
print("Failed")
}
}
var test1 = String()
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.text = test1 //error is here
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
uj5u.com熱心網友回復:
test1創建標簽時不需要參考。a 的text屬性UILabel是一個可選字串,因此不賦值是完全合法的。
即使你可以/確實分配了test1,它也不會幫助你實作你想要的,因為UIKit它不適用于系結;為test1in分配新值viewDidAppear不會更改標簽中的值。
您還需要將您nameLabel的添加到視圖控制器view并設定一些約束或設定其frame; 我假設您已經完成了此操作,viewDidLoad但未在此處顯示。
所有你需要的是:
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
if let result = result as? [NSManagedObject] {
for data in result {
self.nameLabel.text = data.value(forKey:"username") as? String
}
} catch {
print("Failed")
}
super.viewDidAppear(animated) // Don't forget to call super
}
如果您確實想將名稱保留在屬性中,那么您可以使用didSet函式實作偽系結:
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
var name: String? {
didSet {
self.nameLabel.text = name
}
}
override func viewWillAppear(_ animated: Bool) {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
if let result = result as? [NSManagedObject] {
for data in result {
self.name = data.value(forKey:"username") as? String
}
} catch {
print("Failed")
}
super.viewDidAppear(animated) // Don't forget to call super
}
uj5u.com熱心網友回復:
嘗試這個:
override func viewDidAppear() {
super.viewDidLoad()
test() // run the func here
}
func test() {
var test1 = String()
let nameLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
label.text = test1 //error is here
label.font = UIFont.boldSystemFont(ofSize: 26)
label.textColor = .white
return label
}()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372529.html
上一篇:Mac上的SwiftUI:幫助文本即使在零不透明度的視圖中也始終可見
下一篇:如何使用委托從位于Tableview單元格內的Collectionview單元格導航到另一個ViewController?
