【问题标题】:Error Messages When Trying to use Filter with Swift 4, IOS 11尝试将过滤器与 Swift 4、IOS 11 一起使用时出现错误消息
【发布时间】:2018-07-12 11:52:34
【问题描述】:

由于某种原因,当我尝试实现以下代码时,我不断收到 instance of categoryString can’t be used in MyTableViewController 的错误或(当我尝试使用 .contains 而不是 .range 时,这也不起作用)@987654324 @。

我知道我可能遗漏了一个点或其他东西,但我不知道它应该在哪里。请帮忙。

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)
}

【问题讨论】:

    标签: ios arrays string struct swift4


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 非常感谢您回复我,我仍然收到错误消息“实例成员 'categoryString' 不能用于类型 'MyTableViewController'。请问我该怎么办?
    • 您收到此错误是因为您在类范围内分配值,而您应该只声​​明和/或初始化它们,因为 SELF 在属性初始化时不可用。但是,您可以快速使用计算 getter 来实现您的目标。即var newArray: [VintageThings] { oldArray.filter{ $0.category.range(of: categoryString) != nil } }
    • 我现在收到一条错误消息 Missing return in a function expected to return '[VintageThings]' 和一条警告消息 Result of call to 'filter' is unused。 Swift 真是一门奇怪的语言。
    • 对不起。我错过了回报。这不是语言的错。试试这个var newArray: [VintageThings] { return oldArray.filter{ $0.category.range(of: categoryString) != nil } }
    • 非常感谢 Umair,你是个天才,而且工作出色。请问我可以再问一个问题吗?请从 newArray 中选择项目并将它们放入空数组的最佳方法是什么?在此先感谢莉莉。
    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢您回复我,我仍然收到错误消息“实例成员 'categoryString' 不能用于类型 'MyTableViewController'。请问我该怎么办?
    • 错误表明您在其他地方(MyTableViewController.categoryString)的类型上调用categoryString,因为它是一个实例,所以它无法工作
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多