tôi có mã này:phương pháp lớp cha trở về kiểu phân lớp trong nhanh chóng
class Dark: NSObject {
class var className: String {
return NSStringFromClass(self)!.componentsSeparatedByString(".").last!
}
var success = 0
class func devour<T: Dark>(params: Int) -> T {
var s = T()
return assign(s, params: params)
}
class func assign<T: Dark>(item: T, params: Int) -> T{
if item.dynamicType === self {
item.success = params
}
return item
}
}
class Black: Dark {
}
class Violet: Dark {
}
Black.className // returns "Black"
Violet.className // returns "Violet"
Vấn đề xảy ra khi tôi làm điều này:
var ret = Black.devour(5)
ret.success //returns 0 which I expect to be 5
ret.self // returns {Dark success 0} which I expect to be {Black success 0}
Vấn đề ở đây là khi phân lớp sử dụng phương pháp di truyền nuốt, nó trả về một đối tượng thuộc loại Dark
. Tôi muốn có thể trả về kiểu phân lớp và không phải kiểu siêu lớp khi gọi devour. Ví dụ khi tôi làm:
var ret = Black.devour(5)
Lớp của ret nên có lớp Black
và không thuộc về lớp Dark
.
Tôi hy vọng ai đó có thể giúp tôi về vấn đề này. Im thực sự ra khỏi ý tưởng. Cảm ơn! Tôi muốn tránh chaining và tôi coi đó là phương sách cuối cùng.
Chính xác thì vấn đề của bạn là gì? Vui lòng ghi nhật ký lỗi. –
Xem http://stackoverflow.com/questions/26296938/returning-a-subclass-from-its-base-class-in-swift –
hi @RobinEllerkmann: Vấn đề ở đây là khi phân lớp sử dụng phương pháp Devour thừa hưởng, nó trả về một đối tượng kiểu Dark. Tôi muốn để có thể trả về kiểu phân lớp và không phải là kiểu lớp cha khi gọi Devour – oregon