【发布时间】:2018-01-21 21:30:07
【问题描述】:
尽管使用了所有泛型(未显示),但程序在没有警告的情况下编译并按预期运行。
但是,当我尝试通过从协议中删除 notUsed 方法来清理它时,我在主题中得到编译器错误,并且与类似的问题不同,在长堆栈转储中没有引用任何类或方法编译器。另外,在编辑器上方,消息:
“发生内部错误。源代码编辑器功能受限。正在尝试恢复....” 立即出现。
它是简化的,因此是假设的,所以请不要问我通过在解析函数中转换为类型 T 来达到什么目的。 这是整个 osx 命令行程序,它运行得非常好,如图所示。不应该吗?如果您有建议,请您也提供代码,因为泛型语法对我来说有点棘手。
public class Future<T> {
init(_ v:T) { value = v }
let value: T
}
protocol DataParserType {
associatedtype ResultType
func notUsed(with data:Data) -> ResultType
func parse<ResultType>(with data:Data) -> Future<ResultType>
}
class JSONParser: DataParserType {
func notUsed(with data:Data) -> Future<Any> { return Future(2.0) }
func parse<T>(with data:Data) -> Future<T> { return Future(45 as! T) }
}
let X: Future<Int> = JSONParser().parse(with: Data())
print(X.value)
【问题讨论】:
-
notUsed不是该协议中的可选功能。它是否在某处的扩展中实现?此外,通常可以通过显式声明类型来修复奇妙的“分段错误 11”。