是否可以为可选的泛型参数提供默认值?
我正在尝试做这样的事情:
func addChannel<T>(name: String, data: T? = nil) -> Channel {
}
let myChannel = addChannel("myChannelName")
Run Code Online (Sandbox Code Playgroud)
但是我说错了
Argument for generic parameter 'T' could not be inferred
这只是我想要做的事情的一个例子吗?
Rob*_*ier 13
你完成它的方式是不可能的.只给出上面的代码,是什么类型的T?正如它所说的那样,编译器无法弄明白(我也不能,而且我认为你也不能,因为数据不存在).
特定问题的解决方案是重载而不是使用默认值:
func addChannel<T>(name: String, data: T?) -> Channel { ... }
func addChannel(name: String) -> Channel { ... }
let myChannel = addChannel("myChannelName")
Run Code Online (Sandbox Code Playgroud)
但它提出了你在这里做什么的问题.你会认为那Channel应该是Channel<T>.否则,你在做什么data?如果不诉诸Any(你应该强烈避免),很难看出你的函数除了忽略之外什么都可以做data.
有了Channel<T>你可以只使用一个默认的,但你必须提供类型:
func addChannel<T>(name: String, data: T? = nil) -> Channel<T> { ... }
let myChannel: Channel<Int> = addChannel("myChannelName")
Run Code Online (Sandbox Code Playgroud)
否则编译器不会知道你正在制作什么样的频道.