结构:Swift Playground 不打印用户名
Structures: Swift Playground doesn't print username
我是 Swift 的新手,目前正在尝试解决一个问题。我必须创建一个 struct
并且它需要将 userRichard
的状态打印到控制台。这里唯一的问题是我用于 isActive
的打印语句不适用于 userRichard.name
,它在将 isActive
打印到控制台时将该部分留空。
这是为什么?
struct User {
let name: String
var email: String?
var followers: Int
let isActive: String
init(name: String, email: String?, followers: Int, isActive: String) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
logStatus()
}
func logStatus() {
print("\(userRichard.name) is \(isActive)")
}
}
var userRichard = User(name: "Richard", email: "richard@icloud.com", followers: 0, isActive: "not active")
//prints: is not active
我想我知道这里发生了什么...
让我们分解一下代码中的内容:
此处最外层大括号之间的所有内容都与 User 结构相关联。您已正确设置所有属性并且初始化程序看起来不错。暂时忽略初始化程序中的 logStatus() 调用。
接下来,您有一个 'logStatus' 方法声明,它可以应用于您创建的每个 User 实例。
struct User {
let name: String
var email: String?
var followers: Int
let isActive: String
init(name: String, email: String?, followers: Int, isActive: String) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
logStatus()
}
func logStatus() {
print("\(userRichard.name) is \(isActive)")
}
}
所以问题是什么?
我认为这里的问题是您在初始化程序中调用 'logStatus()' 函数,在它有机会完成之前。
如果您按如下方式重组代码,它将起作用:
struct User {
let name: String
var email: String?
var followers: Int
let isActive: String
init(name: String, email: String?, followers: Int, isActive: String) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
}
func logStatus() {
print("\(name) is \(isActive)")
}
}
var userRichard = User(name: "Richard", email: "richard@icloud.com", followers: 0, isActive: "not active")
userRichard.logStatus()
我已经从 logStatus() 函数的 .name 位中删除了 'userRichard'。这意味着如果您在 User 结构的任何实例上调用它,它将显示相应的名称。
接下来,我在用户的 'userRichard' 实例上调用了该函数 - 在它被初始化之后。如果您创建了一个单独的 'userPete' 实例等,同样的方法也应该有效。
希望这是有道理的。
我是 Swift 的新手,目前正在尝试解决一个问题。我必须创建一个 struct
并且它需要将 userRichard
的状态打印到控制台。这里唯一的问题是我用于 isActive
的打印语句不适用于 userRichard.name
,它在将 isActive
打印到控制台时将该部分留空。
这是为什么?
struct User {
let name: String
var email: String?
var followers: Int
let isActive: String
init(name: String, email: String?, followers: Int, isActive: String) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
logStatus()
}
func logStatus() {
print("\(userRichard.name) is \(isActive)")
}
}
var userRichard = User(name: "Richard", email: "richard@icloud.com", followers: 0, isActive: "not active")
//prints: is not active
我想我知道这里发生了什么...
让我们分解一下代码中的内容:
此处最外层大括号之间的所有内容都与 User 结构相关联。您已正确设置所有属性并且初始化程序看起来不错。暂时忽略初始化程序中的 logStatus() 调用。
接下来,您有一个 'logStatus' 方法声明,它可以应用于您创建的每个 User 实例。
struct User {
let name: String
var email: String?
var followers: Int
let isActive: String
init(name: String, email: String?, followers: Int, isActive: String) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
logStatus()
}
func logStatus() {
print("\(userRichard.name) is \(isActive)")
}
}
所以问题是什么?
我认为这里的问题是您在初始化程序中调用 'logStatus()' 函数,在它有机会完成之前。
如果您按如下方式重组代码,它将起作用:
struct User {
let name: String
var email: String?
var followers: Int
let isActive: String
init(name: String, email: String?, followers: Int, isActive: String) {
self.name = name
self.email = email
self.followers = followers
self.isActive = isActive
}
func logStatus() {
print("\(name) is \(isActive)")
}
}
var userRichard = User(name: "Richard", email: "richard@icloud.com", followers: 0, isActive: "not active")
userRichard.logStatus()
我已经从 logStatus() 函数的 .name 位中删除了 'userRichard'。这意味着如果您在 User 结构的任何实例上调用它,它将显示相应的名称。
接下来,我在用户的 'userRichard' 实例上调用了该函数 - 在它被初始化之后。如果您创建了一个单独的 'userPete' 实例等,同样的方法也应该有效。
希望这是有道理的。