【发布时间】:2018-08-16 15:53:14
【问题描述】:
我使用的是 Xcode 9.2。
我收到错误消息:
无法将“(ValueType2) -> Void”类型的值转换为预期值 参数类型 '(_) -> Void'
我有以下代码:
import UIKit
enum Value<ValueType> {
case hasValue(ValueType)
}
class BaseClass<ValueType> {
var value: Value<ValueType>?
func f1<ValueType2>(closure: @escaping (ValueType, @escaping (ValueType2) -> Void) -> Void ){
let s1 = SubClass<ValueType2>()
// The point of the generic type conversion issue
// Cannot convert value of type '(ValueType2) -> Void' to expected argument type '(_) -> Void'
closure(value!, s1.f2)
}
}
class SubClass<ValueType>: BaseClass<ValueType> {
func f2(value: ValueType) -> Void { /* DO SOMETHING */ }
}
我不确定这是否与 Swift 4.1 中修复的 Swift 错误有关:
Swift Generics: Cannot convert value of type to expected argument type
因为自动完成知道类的正确泛型类型参数和函数的参数 - ValueType2 - 在这两种情况下。
关于如何克服这个错误的任何想法?
谢谢
【问题讨论】:
-
看起来它可能是该错误的一个实例。如果我用
Int之类的具体类型替换ValueType2的所有实例,错误就会消失。 -
跟我想的一样。
-
我还注意到,如果我从 f1(closure:) 方法中删除 ValueType 泛型参数,编译器问题就会消失。似乎编译器不喜欢闭包中的两个泛型类型。
标签: ios swift generics type-conversion swift4