swift - 如何获得接受字符串或字符串数组的函数?
问题描述
我觉得这是一个“泛型”的事情,但我无法弄清楚其他人是如何做到的?我很确定我只是在 Typescript 中做String|String[]
,但不确定它在 Swift 中是如何工作的。这是我的尝试:
func HiWorld(passedVar: String|[String]){
print(passedVar)
}
或者
func HiWorld<T, String|[String]>(passedVar: T){
print(passedVar)
}
解决方案
你所描述的是超载。您只需将其表示为两个函数,其中一个链接到更通用的版本。
// Specialized version; a one-element list
func hiWorld(passedVar: String) {
hiWorld(passedVar: [passedVar])
}
// general version; list of any length
func hiWorld(passedVar: [String]) {
print(passedVar)
}
(实际上,这通常也是您最终在 TypeScript 中实现它的方式,因为您通常不能对所有类型执行相同的操作。您的print
示例非常特殊且具有误导性。)
您描述的语法是代数数据类型,Swift 不直接支持该语法。虽然它可能是一个方便的捷径,但 Swift 通常更喜欢在这种重载没有意义的情况下使用显式枚举或协议。
推荐阅读
- php - Laravel not receiving paypal webhook events
- c# - Visual Studio mac 2019(社区)-PresentationCore-找不到.Net Framework 4 的程序集
- sql - 我们可以使用 Windows 身份验证将数据从 kusto 导出到 SQL 吗?
- java - 如何识别我的 Java Spring Web 应用程序的唯一访问者以显示“X 个当前在线用户”?
- mongodb - MongoDB 能否将同一个文档返回到 findOneAndUpdate({ field: { exists: false }}) 的两个异步调用?
- javascript - 如何在每个开口处停止节点安装?故障网
- python - Django:使用 python 方法
- python - 堆积条形图,按游戏类型堆积
- consul - 我可以运行带有 windows 服务器和 linux 客户端的集成 nomad/consul 集群吗?
- functional-programming - map 或 fmap 是否有等效的方法来替换 while 循环?