gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:22:10 27 4
gpt4 key购买 nike

我想在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com