String {-6ren">
gpt4 book ai didi

swift - 如何克服 "Generic parameter ' T' is not used in function signature”的错误?

转载 作者:搜寻专家 更新时间:2023-11-01 06:59:02 24 4
gpt4 key购买 nike

我正在尝试将以下内容转换为通用内容。

extension RLMOrganization: DataProvider {

func getLastSyncToken() -> String {
let lastUpdated: RLMOrganization? = self.findAll(sortedBy: "syncToken").last

if let syncToken = lastUpdated?.syncToken {
return syncToken
} else {
return "00000000000000000000000000000000"
}
}


}

并试过这个:

protocol DataProvider: DatabaseLayer {
associatedtype T: Object

func findAll<T: Object>(sortedBy key: String) -> [T]
}

extension DataProvider {

func findAll<T: Object>(sortedBy key: String) -> [T] {
let database = self.getDatabase()

if let allObjects = database?.objects(T.self) {
let results = allObjects.sorted(byKeyPath: key, ascending: true)
return Array(results)
}

return []
}


func getLastSyncToken<T: Object>() -> String {
let lastUpdated = self.findAll(sortedBy: "syncToken").last as? T

if let value = lastUpdated?.value(forKey: "syncToken") { // get value from object by string name
let syncToken = value as! String
return syncToken
} else {
return "00000000000000000000000000000000"
}
}

...

但似乎无法克服以下错误:

Generic parameter 'T' is not used in function signature

enter image description here

我认为编译器拥有确定类型用法所需的一切。

最佳答案

下面对我有用,我不知道如何findAll已定义,但问题是我看到的对 self 的引用,因此您需要使用 associatedtype 在那里定义 T .

protocol DataProvider: DatabaseLayer {
associatedtype T: Object

func findAll(sortedBy: String) -> T?
}

关于swift - 如何克服 "Generic parameter ' T' is not used in function signature”的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51686840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com