如何打印Swift单例类User中的变量?
如何打印单例User中的变量
嘿,这事儿很简单,我来一步步给你讲清楚!
首先,你已经在第一个ViewController里成功给单例User的name属性赋值为"Bob"了,现在要在第二个ViewController里打印这些变量——因为你的属性都是可选类型(带?),所以得注意处理空值的情况,下面给你几种实用的方法:
方法1:打印单个属性(安全解包)
如果只想打印某个特定属性,比如name,推荐用可选绑定来安全解包,避免nil崩溃:
override func viewDidLoad() { super.viewDidLoad() let user = User.user // 安全打印name if let userName = user.name { print("User name: \(userName)") } else { print("User name is not set") } }
如果你确定这个属性一定有值(比如你已经在其他地方赋值了),也可以用空合运算符快速处理:
print("User name: \(user.name ?? "Unknown")")
⚠️ 不推荐直接强制解包(user.name!),万一属性是nil会直接崩溃哦。
方法2:打印所有属性(自定义描述)
如果想一次性打印User的所有属性,默认NSObject的打印结果会很模糊,我们可以给User类加一个自定义的description属性,让输出更直观:
class User: NSObject { static let user = User() private override init() {} var id: String? var name: String? var email: String? var profileImageUrl: String? var profileImage: UIImage? var profileImageDownloadUrl: String? var partyStatus: Bool? // 自定义描述,让打印结果更清晰 override var description: String { return """ User Info: - ID: \(id ?? "未设置") - Name: \(name ?? "未设置") - Email: \(email ?? "未设置") - Profile Image URL: \(profileImageUrl ?? "未设置") - Party Status: \(partyStatus ?? false ? "已加入" : "未加入") """ } }
然后在第二个ViewController里直接打印整个单例对象就行:
override func viewDidLoad() { super.viewDidLoad() let user = User.user print(user) }
这样输出的结果会非常清晰,一目了然所有属性的状态。
内容的提问来源于stack exchange,提问作者Jason Park
相关产品推荐
相关产品推荐

