我想在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
答案 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;
的可能性