【发布时间】:2017-08-17 15:41:32
【问题描述】:
我知道这是新手问题,但我在 stackoverflow 或谷歌上找不到答案。
我开始使用 Swift 3 语言编写项目。这是我的模型类:
class VKUserProfile: NSObject {
var userId: NSNumber?
var userName: String?
var userEmail: String?
var userMobilePhone: String?
var userPictureUrl: URL?
}
然后我在另一个类中使用它:
private func convert(user: Dictionary<String, Any>) -> VKUserProfile {
var currentUser: VKUserProfile = VKUserProfile()
currentUser.userId = user["id"] as? NSNumber
return currentUser
}
Xcode 在“var currentUser: VKUserProfile = VKUserProfile()”行警告我。好的,但是当我将其更改为“让 currentUser:VKUserProfile = VKUserProfile()”时 - 我无法设置任何属性(对象为空)。那么有人可以描述一下这个过程,为什么 Xcode 会发出警告以及我该如何解决这个问题。
更新: 这是让 currentUser 时 currentUser 变量的屏幕截图:
这是 currentUser 为 var 时 currentUser 变量的截图:
【问题讨论】:
-
您需要使用
let。这解决了你的直接问题。现在澄清一下“我无法设置任何属性”的意思。 -
您确定
user具有给定键的值并且该值属于给定类型吗?你真的需要edit你的问题是关于设置属性的问题而不是let/var的使用。 -
问题可能出在 Xcode 显示信息上吗?我敢打赌,当您使用
let时,数据实际上就在那里,就像您使用var时一样。不要相信 Xcode 的调试器。 -
当你
print(currentUser)时,它不会显示属性的值。它仅适用于struct类型或您已符合CustomStringConvertible协议并实现description属性以显示属性值的情况。 -
我明白这一点。我的观点仅仅是,使用自定义
class类型,您也不能只是print对象并期望看到这些值。除非您符合CustomStringConvertible,否则您只会看到地址。