我觉得这是一个“泛型”的东西,但我不明白其他人是怎么做的?我很确定在 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 通常更喜欢使用显式枚举或协议(protocol)。
关于swift - 如何让函数接受字符串或字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65206917/