swift - swift 中的函数参数接受数组或字符串

标签 swift

我想在 Swift 中编写一个名为 remove 的函数,它将接受一个数组或字符串,并从字典中删除该字符串(如果它是字符串),否则它将从字典中删除所有字符串存在于数组中。另外,我编写的这个函数会禁用 Xcode 编辑器中的样式。

func remove(key: AnyObject){
    if key is Array{
        for (index, value) in enumerate(key){
            if -1 < self._getDataStoreKeyIndex(value){
               self._removeProperty(value)
            } else{
                self._removeItem(value)
            }
        }
    }else{
        if -1 < self._getDataStoreKeyIndex(key){
           self._removeProperty(key)
        }else{
            self._removeItem(key)
       }
    }
}

代码中的其他函数是正确的,因为如果我注释此函数,我的项目就会成功构建。我的代码有什么问题?

我遇到段错误。

<unknown>:0: error: unable to execute command: Segmentation fault: 11

最佳答案

问题的核心是尝试转换为“Array”,这是一个泛型类。相反,您需要转换为泛型的特定实例,在您的情况下为“Array”或“[String]”

您还有一个问题,即无法枚举 AnyObject,组合起来,您需要类似的东西:

func remove(key: AnyObject) {
    if let array = key as? Array<String> {
        for (index, value) in enumerate(array) {
        }
    }
    else {
    }
}

虽然我不确定为什么你要使用 enumerate 来获取不用于任何用途的索引,但直接迭代数组会更快、更清晰:

func remove(key: AnyObject) {
    if let array = key as? Array<String> {
        for value in array {
        }
    }
    else {
    }
}

进一步的思考...这两个操作确实不相似,并且没有真正共享太多代码。为什么不定义签名不同的不同函数:

func remove(key:String) {
}

func remove(array:[String]) {
    for string in array {
        remove[string]
    }
}

这消除了有人调用“remove(5)”的可能性

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

相关文章:

swift - 带有自定义表格 View 单元格的表格 View 在滚动时消失

ios - PickerView无法更改第二行的颜色

arrays - 使用 for 循环打印 Array 或 Set 的内容

ios - 不同的单元格取决于单元格文本

swift - 如何在 Swift 的 collectionView 方法之外访问单元格的值?

ios - 单击按钮时打开 PDF 文档

string - Swift,将字符串转换为 double 错误

ios - Xcode 模拟器显示空白屏幕,直到退出调试器

swift - 使用 Alamofire 的 Swift 版本问题

ios - 在 tableviewCell 中快速实现一个类似的按钮