您可以通过引入
Error
类型,以及引发该错误的辅助函数:
struct MissingField: Error { }
func missingField<R>() throws -> R { throw MissingField() }
具有
missingField
,您可以按照以下行重写每个inits:
init?(userNode: [String: Any]) {
do {
userProfile = try UserProfile(userNode: userNode) ?? missingField()
userSettings = try UserSettings(userNode: userNode) ?? missingField()
email = try userNode[EMAIL] as? String ?? missingField()
uid = try userNode[UID] as? String ?? missingField()
} catch {
return nil
}
}
init?(
credentials: AuthCredentials,
profileDownloadUrl: [String],
uid: String
) {
do {
userProfile = try UserProfile(
birthday: credentials.birthday ?? missingField(),
profilePictures: profileDownloadUrl,
firstName: credentials.firstName ?? missingField(),
lastName: credentials.lastName ?? missingField()
)
userSettings = try UserSettings(
minSeekingAge: MAX_AGE,
maxSeekingAge: MIN_AGE,
distanceRange: MAX_DISTANCE_RANGE,
gender: credentials.gender ?? missingField(),
preference: credentials.preference ?? missingField(),
geoHash: credentials.geoHash ?? missingField(),
latitude: credentials.latitude ?? missingField(),
longitude: credentials.longitude ?? missingField()
)
email = try credentials.email ?? missingField()
self.uid = uid
} catch {
return nil
}
}