簡體   English   中英

在 Swift 5 中轉換為泛型類型

[英]Cast to generic type in Swift 5

我想編寫一個通用的 function,它使用核心數據框架在本地獲取某種數據。 我這樣寫了 function:

func fetch<T:NSManagedObject>(type: T.Type = T.self, completion: @escaping (([T]?) -> ())) {
    do {
        let data = try context.fetch(T.fetchRequest()) as [T]
        completion(data)
    } catch {
        completion(nil)
    }
}

但是,編譯器告訴我這個錯誤“無法將類型'[Any]'的值轉換為強制類型'[T]',arguments 到泛型參數'Element'('Any'和'T')預計相等"

有沒有可能做這種演員?

試試下面的代碼:

func fetch<T:NSManagedObject>(type: T.Type = T.self, completion: @escaping (([T]?) -> ())) {
    do {
        let data = try context.fetch(T.fetchRequest()) as? [T]
        completion(data)
    } catch {
        completion(nil)
    }
}

(正如 Sweeper 指出的fetch返回一個數組,因此您必須將結果轉換為[T]而不僅僅是T

暫無
暫無

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

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