swift - 如何让函数接受字符串或字符串数​​组?

标签 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 通常更喜欢使用显式枚举或协议(protocol)。

关于swift - 如何让函数接受字符串或字符串数​​组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65206917/

相关文章:

swift - 从函数内触发按钮是否会在堆栈上留下一些东西?

ios - 自定义表格 View 行操作(图片)

swift - 将 destructiveButtonTitle 移动到 UIActionSheet 的底部

swift - SpriteKit SKPhysicsJoint修复了奇怪的行为

ios - 使用帧方法的带有音频的慢动作视频 - iOS

swift - 通过枚举显示多个 UICollectionViewCells?

json - 快速解析JSON数据

arrays - 苹果在使用 URLSession.shared.dataTask 后更改了我的 JSON 格式

arrays - 将我自己的类保存为 Parse 中的数组

swift - UIRefreshControl 的tintColor 无法初始设置