gpt4 book ai didi

swift - 通过自定义数组过滤

转载 作者:行者123 更新时间:2023-11-30 12:41:29 25 4
gpt4 key购买 nike

所以我不知道为什么,但我有一个自定义对象

struct Country {
id: Int,
name: String
}
//List of Countries
dataArray = [Country]()

//Error: "Cannot invoke filter with an arg list of type ((Country)) throws -> Bool

filteredArray = dataArray.filter({ (country) -> Bool in
let countryText:NSString = country.name as NSString
return (countryText.range(of: searchString, options: NSString.CompareOptions.caseInsensitive).location) != NSNotFound
})

如果 dataArray 是字符串列表,那么它会起作用,我只是不明白为什么,查看其他 SO 问题我返回一个 bool 值

Filter array of custom objects in Swift

Swift 2.0 filtering array of custom objects - Cannot invoke 'filter' with an argument of list type

最佳答案

过滤器闭包中的问题在于它的类型是 ((Country)) throws -> Bool,而它应该是 Country -> Bool

这告诉您的是,您的闭包代码中的某些部分可能会失败并引发错误。编译器不知道如何解释失败,因此闭包不会抛出错误。

查看您的代码,这可能是由于从 StringNSString 的转换。我尝试在我的机器(Swift 3,Ubuntu 16.04)中重现您的代码,但在 Actor 阵容中失败了。我的解决方案是使用接收 StringNSString 构造函数,并且它有效

更新的代码:

struct Country {
var id: Int
var name: String
}

//List of Countries
let dataArray = [Country(id: 1, name: "aaaaaaa"), Country(id: 1, name: "bbbb")]

let filteredArray = dataArray.filter({ (country) -> Bool in
let countryText: NSString = NSString(string: country.name)
return (countryText.range(of: "aaa", options: NSString.CompareOptions.caseInsensitive).location) != NSNotFound
})

print(filteredArray)

打印:

[helloWorld.Country(id: 1, name: "aaaaaaa")]

希望对您有帮助!

关于swift - 通过自定义数组过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42182324/

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