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

时间:2014-08-26 12:28:09

标签: 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

1 个答案:

答案 0 :(得分:1)

问题的核心是试图转换为&#34;数组&#34;这是一个通用类。相反,您需要转换为通用的特定实例,在您的情况下&#34;数组&#34;或&#34; [String]&#34;

你也有一个问题,你不能枚举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]
    }
}

这消除了某人呼叫&#34;删除(5)&#34;

的可能性