尝试在Swift 4,IOS 11

时间:2018-07-12 11:52:34

标签: ios arrays string struct swift4

由于某种原因,当我尝试实现以下代码时,总是收到instance of categoryString can’t be used in MyTableViewController或(当我尝试使用.contains而不是.range时出现的错误)的错误。 the function contains doesn’t exist in the VintageThings struct

我知道我可能遗漏了一个点或某物,但我不知道应该在哪里。请帮忙。

class MyTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    // Category is being called from the scene before    
    var categoryString = String()

    var newArray:[VintageThings] = []

    newArray = oldArray.filter({($0.category.range(of: categoryString)
}

2 个答案:

答案 0 :(得分:1)

方法Array.filter期望一个布尔条件,它将根据该条件过滤对象。而根据您的情况,您的情况(即$0.category.range(of: categoryString))将返回Range<String.Index>?。例如,如果要使条件为布尔值,则必须检查其范围是否为零,即

newArray = oldArray.filter( { $0.category.range(of: categoryString) != nil } )

OR

newArray = oldArray.filter{ $0.category.range(of: categoryString) != nil }

OR

newArray = oldArray.filter { (vintageThing) -> Bool in
            return vintageThing.category.range(of: categoryString) != nil
        }

答案 1 :(得分:0)

花括号和括号不平衡,您必须检查!= nil才能获得预期的Bool结果。

newArray = oldArray.filter{ $0.category.range(of: categoryString) != nil }