非常基本的问题感谢您的帮助
尝试通过引用对象(jName)中的存储属性来更改UILabel的文本,这样您可以在将来更改/添加更多名称/标签,而不是仅仅显式声明firstName.text =" Joe布罗格斯"
不明白为什么它不允许我将文本更改为jName的存储属性?我尝试了属性,但这也没有帮助。有人知道构建这个的最佳方法吗?
class ViewController: UIViewController {
@IBOutlet var firstName: UILabel!
@IBOutlet var thirdName: UILabel!
struct jName {
var fName: String = "Joe"
var lName: String = "Blogs"
init(fName: String, lName: String) {
self.fName = fName
self.lName = lName
}
}
override func viewDidLoad() {
super.viewDidLoad()
assignLabels()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func assignLabels() {
firstName.text = jName.fName
thirdName.text = jName.lName
}
}
答案 0 :(得分:0)
我正在提供一些提示代码,希望你能得到一个想法!
struct jName {
var fName: String = "Joe"
var lName: String = "Blogs"
init(fName: String, lName: String) {
self.fName = fName
self.lName = lName
}
}
let myname = jName.init(fName: "sanjeet", lName: "kumar")
let mystrng = myname.fName
print(mystrng)
答案 1 :(得分:0)
首先,既然你正在使用struct,那么已经有了一个内置的构造函数,所以如果你没有在其上放置自定义代码,那么代码中的这部分是不必要的:
init(fName: String, lName: String) {
self.fName = fName
self.lName = lName
}
它不会让您更改文本,因为您没有初始化结构并且您正在尝试直接访问其属性。您应该在使用其属性之前实例化该结构:
func assignLabels() {
let jNameStruct = jName(fName: "Joe", lName: "Blogs")
firstName.text = jNameStruct.fName
thirdName.text = jNameStruct.lName
}
另一个选项是在变量中使用static
修饰符,这样您就可以直接访问存储的属性:
struct jName {
static var fName: String = "Joe"
static var lName: String = "Blogs"
init(fName: String, lName: String) {
self.fName = fName
self.lName = lName
}
}
答案 2 :(得分:0)
由于您编写了一个结构,因此需要先创建它的新实例,然后才能访问其属性。
所以把这一行放在你的班级中:
var names = jName(fName: "Joe", lName: "Blogs")
以上行将创建jName
的新实例。现在,您可以使用变量names
来访问属性:
func assignLabels() {
firstName.text = names.fName
thirdName.text = names.lName
}
从您提出问题的方式来看,我认为您真正想要的是当names.fName
和names.lName
的值发生变化时,标签的文字会自动更改。为此,您需要向属性添加属性观察器,并在属性观察器中设置标签文本:
struct jName {
var fName: String = "Joe" {
willSet { firstName.text = newValue }
}
var lName: String = "Blogs" {
willSet { thirdName.text = newValue }
}
init(fName: String, lName: String) {
self.fName = fName
self.lName = lName
}
}