您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Swift函数中可选通用参数的默认值

Swift函数中可选通用参数的默认值

用您完成的方式是不可能的。仅考虑上述代码,什么是类型T?就像它说的那样,编译器无法弄清楚(我也不能,因为数据不存在,我也不能。)

特定问题的解决方案是重载而不是使用认值:

func addChannel<T>(name: String, data: T?) -> Channel { ... }

func addChannel(name: String) -> Channel { ... }

let myChannel = addChannel("myChannelName")

但这引发了您在这里做什么的问题。您会认为Channel应该如此Channel<T>。否则,您在做什么data?如果不诉诸Any(您应该强烈避免),那么很难看到您的函数除了忽略之外还能做什么data

有了Channel<T>你可以只使用一个认的,但你必须提供类型:

func addChannel<T>(name: String, data: T? = nil) -> Channel<T> { ... }
let myChannel: Channel<Int> = addChannel("myChannelName")

否则,编译器将不知道您正在建立哪种通道。

(更新?Swift 5.2)

有时,您需要使用的认类型T。您可以重载。例如,您可能希望认类型为Never在这种情况下,您将添加如下重载:

func addChannel<T>(name: String, data: T? = nil) -> Channel<T> { ... }
func addChannel(name: String) -> Channel<Never> { 
    addChannel(name: name, data: Optional<Never>.none)
}

这样,您可以进行更简单的调用

let myChannel = addChannel(name: "myChannelName") // Channel<Never>
Swift 2022/1/1 18:15:29 有464人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶