嗨我想確保一個函數只接受特定的類作爲類中的泛型。無法將類型'GenericClass <Class>'的值轉換爲預期參數類型'GenericClass <Class>?'
所以我這樣做:
func request<T: JSONObject>(liveData: LiveData<T>?, arrayLiveData: LiveData<[T]>?,
callback: (([String: Any]) ->())?,) {
...
}
所以在這裏我只想讓T
是的JSONObject
一個子類。
有時它有時不起作用。
JSONObject.swift:
class JSONObject: NSObject, NSCoding {
internal var json: [String: Any]
required init?(_ json: [String: Any]) {
self.json = json
super.init()
}
override init() {
fatalError("Not implemented")
}
func encode(with coder: NSCoder) {
coder.encode(self.json)
}
required init?(coder decoder: NSCoder) {
fatalError("Must be overwritten")
}
class func decodeJSON(_ decoder: NSCoder) -> [String: Any] {
return decoder.decodeObject() as! [String: Any]
}
}
一個子類: Content.swift
class Content: JSONObject {
// MARK: Properties
// MARK: Initialization
required init?(_ json: [String : Any]) {
super.init(json)
}
required convenience init?(coder decoder: NSCoder) {
self.init(JSONObject.decodeJSON(decoder))
}
}
和這一小類的JSONObject
GET的子類爲WEL,這樣我就可以在fucction使用它。
class Playlist: Content {
required init?(_ json: [String : Any]) {
super.init(json)
}
required convenience init?(coder decoder: NSCoder) {
self.init(JSONObject.decodeJSON(decoder))
}
}
我這樣調用該函數:
request(liveData: LiveData<Playlist>(), arraryLiveData: nil, callback: nil)
我必須使用子類,所以我肯定知道,在功能request
每T
有初始化器T(_ json: [String: Any])
BUT :當我嘗試編譯XCode抱怨在request
請致電
Cannot convert value of type 'LiveData<Playlist>' to expected argument type 'LiveData<JSONObject>?'
LiveData.swift
class LiveData<T> {
private var senderId: String
private var value: T?
private var observers: [LiveDataObserver]
init(senderId: String) {
self.senderId = senderId
self.observers = []
}
func getValue() -> T? {
return value
}
func setValue(_ value: T) {
self.value = value
notifyObservers()
}
func sendError(_ error: LiveDataError) {
for observer in observers {
observer.errorOccurred(senderId, error)
}
}
func sendError(_ string: String) {
sendError(liveDataError(from: string))
}
private func notifyObservers() {
for observer in observers {
observer.valueChanged(senderId, value)
}
}
func observe(observer: LiveDataObserver) {
observers.append(observer)
// Send initial value if value is present
if value != nil {
observer.valueChanged(senderId, value)
}
}
func hasObservers() -> Bool {
return observers.count > 0
}
func removeObservers() {
observers.removeAll()
}
}
具體什麼不順心是什麼時候? – JeremyP
@JeremyP我得到這個錯誤無法將'LiveData'類型的值轉換爲期望的參數類型'LiveData ?' 當我嘗試調用請求(...)' –
什麼是聲明'LiveData' – JeremyP