我做了很多研究,但没有找到我问题的答案。其他人则用Swift类讨论基本问题。我对自己的课程还是有意见的。我也读过关于课程的课程,但这对我没有帮助。
我有两个班,一个是从另一个班继承的。
这是我的课程代码:
class GlobalUser {
var uid: String!
var publicName: String!
var pushID: String!
var firstName: String!
var lastName: String!
var example1: [String:String]!
var fullName: String! {
get {
return firstName + " " + lastName
}
}
init(document: DocumentSnapshot) {
guard let data = document.data() else {
print("Missing user information during initialization.")
return
}
self.uid = document.documentID
self.publicName = (data["publicName"] as? String)!
self.pushID = (data["pushID"] as? String)!
self.example1 = (data["example1"] as? [String : String])!
let name = data["name"] as? [String:String]
self.firstName = (name!["firstName"])!
self.lastName = (name!["lastName"])!
}
}
class InterestingUser: GlobalUser {
var code: Int?
var example: [String:String]?
var number: Int! {
get {
return example.count
}
}
override init(document: DocumentSnapshot) {
super.init(document: document)
}
}
然后我试着把a
GlobalUser
转换成这样的aInterestingUser
:if let interestingUser = user as? InterestingUser {
...
}
但这个演员总是失败。。。
知道吗?提前谢谢你的帮助。
最佳答案
您遇到的错误是由于您的问题中的以下语句造成的:“然后我尝试将GlobalUser转换为像这样感兴趣的用户…”,这是由于继承造成的。
你的类是超类。你的GlobalUser
是你的InterestingUser
的一个子类。
所以你的GlobalUser
类“知道”这个InterestingUser
,因为它是它的父类,你可以投射GlobalUser
,但不是相反。
例子:
if let interstingUser = InterestingUser() as? GlobalUser {
// this will succeed because InterestingUser inherits from GlobalUser
}
if let globalUser = GlobalUser() as? InterestingUser {
// this will fail because GlobalUser is not a subclass of InterestingUser
}
这里有一些操场代码供您测试:
class GlobalUser {
}
class InterestingUser: GlobalUser {
}
class Demo {
func comparison() {
let interesting = InterestingUser()
let global = GlobalUser()
if let intere = interesting as? GlobalUser {
print("Interesting is global as well")
}
if let global = global as? InterestingUser {
print("Global is interesting")
}
}
}
let demo = Demo()
demo.comparison()
// prints 'Interesting is global as well'