gpt4 book ai didi

xcode - Swift - 无法显式专门化泛型函数

转载 作者:搜寻专家 更新时间:2023-10-31 22:50:39 24 4
gpt4 key购买 nike

我遇到了编译器问题。当我使用 SwiftTask 和 Async 时会发生这种情况,这是一个示例:

//-- 泛型方法

import Async
import SwiftTask

class AsyncTask {
func background<T>(job: (((Float -> Void), (T -> Void), (NSError -> Void), SwiftTask.TaskConfiguration) -> Void)) -> SwiftTask.Task<Float, T, NSError> {
return SwiftTask.Task<Float, T, NSError> { (progress: (Float -> Void), fulfill: (T -> Void), reject: (NSError -> Void), configure: SwiftTask.TaskConfiguration) -> Void in
Async.background {
job(progress, fulfill, reject, configure)
return
}

return
}
}
}

现在可以编译了,但是当我尝试像这样使用泛型时:

//-- 使用泛型方法

let task = AsyncTask.background<MyAwesomeObject> { progress, fulfill, reject, configure in
let obj = MyAwesomeObject()
//-- ... do work here
fulfill(obj)
return
}

然后我收到以下错误无法显式特化通用函数

最佳答案

您尝试专门化通用函数的方式称为 explicit specialization .这不是语法错误,是语义错误。在解析时,两者之间没有区别

let x = foo<Int>()

let arr = Array<Int>()

但是在 Swift 语言的当前版本 5.1 中,这是不允许的,但是 in future versions it could be permited使用它。

今天,泛型函数的类型参数总是通过类型推断来确定。例如,给定:

func foo<T>()

let x = foo() as Int

// or

let x: Int = foo()

or T 通过参数的类型确定。在这种情况下,必须在方法签名中引入一个额外的参数

func foo<T>(t: T)

let x = foo(Int.self)

关于xcode - Swift - 无法显式专门化泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720035/

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