簡體   English   中英

轉換為 swift 中的通用 class 類型

[英]Cast to a generic class type in swift

我的目標是將從數據庫中獲取的結果返回到任何給定類型(模型)。 出於某種原因,我收到錯誤為“使用未聲明的類型'模型'”。 我在這里想念什么? 以及如何實現我的目標。

func fetchData<T>(entity:String, model: T)-> T? {


    let request = NSFetchRequest<NSFetchRequestResult>(entityName:entity)
    request.returnsObjectsAsFaults = false

        do {

            let result = try managedObjectContext.fetch(request)
            if result.count > 0 {

                return result as model // Point that gets the error 

            }

        } catch {

          print("Failed to retrive data")
        }

    return nil

}

您想在轉換時使用as而不是is並且要轉換的類型是T而不是model ,或者更確切地說是[T]因為它是一個數組,所以 function 聲明也需要修改

func fetchDsata<T>(entity:String, model: T.Type)-> [T]? {
    let request = NSFetchRequest<NSFetchRequestResult>(entityName:entity)
    request.returnsObjectsAsFaults = false
        do {
            let result = try managedObjectContext.fetch(request)
            if result.count > 0 {
                return result as? [T]
            }
        } catch {
          print("Failed to retrive data")
        }
    return nil
}

沒必要投。

根據 Joakim 的回答,我建議使該方法更通用,並將throw交給調用者。

使用泛型創建獲取請求擺脫了類型轉換

func fetchData<T : NSFetchRequestResult>(entity:String, model: T.Type) throws -> [T] {
    let request = NSFetchRequest<T>(entityName:entity)
    request.returnsObjectsAsFaults = false
    return try managedObjectContext.fetch(request)
}

並使用它

do {
    let result = try fetchData(entity: “Foo”, model: Foo.self) 
    print(result)
} catch {
    print("Failed to retrive data")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM