首页 > 解决方案 > 如何获得接受字符串或字符串数​​组的函数?

问题描述

我觉得这是一个“泛型”的事情,但我无法弄清楚其他人是如何做到的?我很确定我只是在 Typescript 中做String|String[],但不确定它在 Swift 中是如何工作的。这是我的尝试:

func HiWorld(passedVar: String|[String]){
   print(passedVar)
}

或者

func HiWorld<T, String|[String]>(passedVar: T){
   print(passedVar)
}

标签: swift

解决方案


你所描述的是超载。您只需将其表示为两个函数,其中一个链接到更通用的版本。

// 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 通常更喜欢在这种重载没有意义的情况下使用显式枚举或协议。


推荐阅读