无法将“字符串”类型的值转换为预期的参数类型“ _?”

时间:2018-10-10 10:13:22

标签: swift generics

因此,我正在为Swift泛型而苦苦挣扎。我正在尝试创建在其他模块中定义的结构的实例。该结构的属性具有通用类型。

模块代码:

public struct MyModuleResponse<T> {
    let payload: T?
}

主要目标代码:

@import MyModule
....
let payload = "Something"
let result = MyModuleResponse(payload: payload)

这会导致错误:

  

无法将“字符串”类型的值转换为预期的参数类型“ _?”

如果我在主要目标中声明了该结构的相同版本:

public struct MyOwnResponse<T> {
    let payload: T?
}

let payload = "Something"
let result = MyOwnResponse(payload: payload)

没有错误,并且按预期构建。

我的设置:

  • Xcode 10.0
  • 迅速4.2

示例项目可在此处找到:https://github.com/cameroncooke/generics

任何能帮助我了解这里发生的事情的人都会非常感激。

了解Swift type _的含义,_的含义也很有用。该错误消息非常含糊,并没有给出任何线索。

1 个答案:

答案 0 :(得分:3)

正如达维德所说,payload变量必须是可选的。

Swift初始值设定项的默认保护级别为internal。您需要将MyModuleResponse初始化程序的保护级别设置为public

public init(payload: T?) {
    self.payload = payload
}