[英]Can't cast a value from a subclass Swift
我做了很多研究,但沒有找到問題的答案。 其他人則談論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)
}
}
然后我嘗試像這樣將GlobalUser
轉換為InterestingUser
:
if let interestingUser = user as? InterestingUser {
...
}
但是這個演員總是失敗的...
任何想法? 在此先感謝您的幫助。
您遇到的錯誤是由於您的問題所引起的:“ 然后,我嘗試將GlobalUser強制轉換為類似這樣的... ”,這是由於繼承。
您的GlobalUser
類是超類。 您的InterestingUser
是GlobalUser
的子類。
因此,您的InterestingUser
類“知道” GlobalUser
因為它是父類,因此您可以將InterestingUser as? GlobalUser
GlobalUser
InterestingUser as? GlobalUser
InterestingUser as? 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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.