[英]How to return a default value for a generic parameter in a function in Swift?
我正在使用泛型在函數的調用位置動態分配響應應為的值的類型。
我如何為通用參數設置默認值,以使沒有人假設不會出現並在沒有對象時插入對象作為響應?
希望代碼能說明一切,並且比我有更多的道理。
其他資訊:
在下面的方法中,如果它是GET請求,則使用json響應初始化T。 如您所見,泛型必須符合QueryType協議,該協議僅包含一個初始化程序,因此每個T對象都具有一個初始化程序以自己的方式處理響應。
func fireRequest<T: QueryType>(_ request: FirebaseRequest, completion: @escaping (_ data: [T]? = [], _ error: FirebaseError?) -> Void ) {
// setting default value to data param throws error.
}
成功的用例:
client.fireRequest(FirebaseRequest.observe(path: path), completion: { (data: [User], error: FirebaseError? ) in
// Since I infer 'T' to be of type User, i can expect a collection of users, or single user as my response. This is what I want.
})
錯誤用例:
client.fireRequest(FirebaseRequest.setValue(path: path, value: locationData), completion: { (_, error: FirebaseError? ) in
// error: generic parameter 'T' could not be inferred.
// In this case, I am posting some data to database, so I dont expect a response, but putting underscore throws error.
})
我不確定您要問的是什么,但可以使用T()
生成該類型的默認值。
至於下划線,是因為(_, FirebaseError?)->Void
與([T], FirebaseError?)->Void
。 所以你應該關閉
{(_:[AnyObject]?, error: FirebaseError?) in code }
如果要使用泛型,則需要定義一些函數,例如
func errorCaseCompletetion<T>( _ : [T]?, error: FirebaseError?){
//code
}
然后,您只需傳遞函數名稱作為完成塊即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.