我找遍了所有地方,找不到此代码无法正常工作的原因。我正在尝试初始化将与 Firebase 一起使用的用户类,因此我需要初始化一个字典才能检索 JSON 数据。我已经这样做了很多次并且没有遇到任何问题但是由于某种原因这次 xcode 给了我“从初始化程序返回而不初始化所有存储的属性”。据我所知,我的所有属性都已初始化。我错过了什么吗?预先感谢您的帮助!
enum UserAccessLevel: String {
case unknown = "Unknown"
case executiveProducer = "Executive Producer"
case topTierProducer = "Top Tier Producer"
case lowTierProducer = "Low Tier Producer"
case crew = "Crew Member"
case vendor = "Vendor"
case talent = "Talent"
}
enum Access: String {
case granted = "true"
case denied = "false"
}
enum FIRUserData: String {
case firstName = "firstName"
case lastName = "lastName"
case city = "city"
case state = "state"
case profileImage = "profileImage"
case userName = "userName"
case accessLevel = "accessLevel"
}
protocol User {
var firstName: String { get set }
var lastName: String { get set }
var city: String { get set }
var state: USAState { get set }
var profileImage: String { get set }
var userName: String { get set }
var accessLevel: UserAccessLevel { get set }
func createUser() throws
func signInUser() throws
func signOutUser()
func archiveProject()
func activateProject()
func deleteProject()
}
class UserType: User {
var firstName: String
var lastName: String
var city: String
var state: USAState
var profileImage: String
var userName: String
var accessLevel: UserAccessLevel
init(firstName: String, lastName: String, city: String, state: USAState, profileImage: String, u accessLevel: UserAccessLevel) {
self.firstName = firstName
self.lastName = lastName
self.city = city
self.state = state
self.profileImage = profileImage
self.userName = "\(firstName).\(lastName)"
self.accessLevel = accessLevel
}
init(userName: String, userData: Dictionary <String, Any>) {
self.userName = userName
if let firstName = userData[FIRUserData.firstName.rawValue] {
self.firstName = firstName as! String
}
if let lastName = userData[FIRUserData.lastName.rawValue] {
self.lastName = lastName as! String
}
if let city = userData[FIRUserData.city.rawValue] {
self.city = city as! String
}
if let state = userData[FIRUserData.state.rawValue] {
self.state = state as! USAState
}
if let profileImage = userData[FIRUserData.profileImage.rawValue] {
self.profileImage = profileImage as! String
}
if let accessLevel = userData[FIRUserData.accessLevel.rawValue] {
self.accessLevel = accessLevel as! UserAccessLevel
}
}
最佳答案
在您的 UserType
类的第二个 init
中,Xcode 认为不能保证设置所有类属性,因为 if
语句可能会失败。
解决方案是为所有 if
语句包含一个 else
block :
init(userName: String, userData: Dictionary <String, Any>) {
self.userName = userName
if let firstName = userData[FIRUserData.firstName.rawValue] as? String {
self.firstName = firstName
} else {
firstName = //something else
}
//do the same thing with other if statements
}
关于Swift 从初始化程序返回而不初始化所有存储的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48046101/