当前位置: 首页 > 面试题库 >

在Swift中过滤[AnyObject]的数组

堵德曜
2023-03-14
问题内容

AnyObject在Swift中有一组对象。每个对象都有餐厅的属性,例如名称,类型,位置等。如果我想将数组中所有包含类型的对象保留为“
Sushi”,该如何过滤数组。

[AnyObject]具有2个对象的示例数组。过滤器应保留第一个对象(类型:sushi):

[<Restaurant: 0x7ff302c8a4e0, objectId: LA74J92QDA, localId: (null)> {
    City = "New York";
    Country = "United States";
    Name = Sumo Japan;
    Type = Sushi, Japanese, Asian;
}, <Restaurant: 0x7ff302daa790, objectId: 0aKFrpKN46, localId: (null)> {
    City = "New York";
    Country = "United States";
    Name = Little Italy;
    Type = Italian, Pizza;
}]

当前代码(但我不确定过滤器是否可以搜索的数组[AnyObject]):

var query = PFQuery(className:"Restaurant")
query.whereKey("RestaurantLoc", nearGeoPoint:userGeoPoint, withinMiles:50)
query.limit = 2
query.findObjectsInBackgroundWithBlock {
    (objects: [AnyObject]!, error: NSError!) -> Void in
    if objects != nil {
        println("list of objects of nearby")
        println(objects)
        let searchString = "Sushi"
        let predicate = NSPredicate(format: "Type CONTAINS[cd] %@", searchString);

        //Line below gives error: '[AnyObject]' does not have a member named 'filteredArrayUsingPredicate'
        //let filteredArray = objects.filteredArrayUsingPredicate(predicate!)

问题答案:

您的数组,objects是一个PFObject对象数组。因此,对于filter数组,您可以执行以下操作:

let filteredArray = objects.filter() {
    if let type = ($0 as PFObject)["Type"] as String {
        return type.rangeOfString("Sushi") != nil
    } else {
        return false
    }
}

基于我们正在处理自定义Restaurant对象的假设,我的原始答案如下:

您可以使用该filter方法。

假设Restaurant定义如下:

class Restaurant {
    var city: String
    var name: String
    var country: String
    var type: [String]!

    init (city: String, name: String, country: String, type: [String]!) {
        ...
    }
}

因此,假设这type是一个字符串数组,您将执行以下操作:

let filteredArray = objects.filter() {contains(($0 as Restaurant).type, "Sushi")}

如果类型数组可以是nil,则可以对其进行条件分解:

let filteredArray = objects.filter() {
    if let type = ($0 as Restaurant).type as [String]! {
        return contains(type, "Sushi")
    } else {
        return false
    }
}

具体情况会有所不同,具体取决于您对的声明Restaurant,您尚未与我们分享此声明,但希望这可以说明这一想法。



 类似资料:
  • 问题内容: 我无法理解AnyObject的局限性。 您可以从标题中看到Array是一个结构。但是,此代码有效: 而且不只是文字数组: 但是,我不能为我分配一个结构: 那么,数组毕竟不是真正的结构吗? 问题答案: 这是桥接出现时最有趣的部分… 默认情况下,Swift bridge (和朋友) 至 至 因此,如果需要,编译器会将它们更改为对象 你可以做 并且您不能将/ 分配给,因为它们不是对象类型(可

  • 问题内容: 我不明白何时在Swift中使用AnyObject以及何时使用Any。 就我而言,我有字典 [字串:???] ??? :可以是Int,Double,Float,String,Array,Dictionary 有人可以向我解释Any和AnyObject之间的区别以及在我的情况下使用哪个。 阿拉克 问题答案: 仅适用于引用类型(类),适用于值和引用类型。 所以你应该去。 类型转换为Any和A

  • 问题内容: 基本上,我有一个名为的结构,主题包含,以及一个标志(有关说明,请参见下面的屏幕截图)。 在应用程序中,我想过滤数据,仅显示具有的主题。 这就是我想要做的: 但这是行不通的。我应该如何处理?在此先感谢您的帮助。 问题答案: 您那里有一些小错误。总体来说还算不错,但是结合起来它们将永远无法正常工作: 调用任何方法都将返回一个新对象 您需要先过滤其价值 您需要遍历结果 结合这些: 我们会定期

  • 问题内容: 我正在尝试快速过滤自定义对象的数组,以获取具有我要隔离的属性的数据子集。我的代码如下。 我的自定义对象如下: 但是,尝试编译此代码时,Xcode引发的错误是: 我正在使用Swift 1.2,似乎无法弄清楚自己在做什么。任何帮助,将不胜感激。 问题答案: 在Swift 1.2中,是一个全局函数,因此您不能说。(在Swift 2中,这将起作用。) 此外,不能与此类字符串一起使用。我建议使用

  • 问题内容: 如标题所示,Array vs NSArray vs [AnyObject]有什么区别? 另外,最推荐的解决方法。我的意思是建议最简单的实现是什么。谢谢。 问题答案: 是 struct ,因此它是Swift中的 值类型 。 是一个不变的Objective C 类 ,因此它是Swift中的 引用类型 ,并桥接到。 是的可变子类。 印刷品: 因为更改的局部值并更改参考。如果您这样做而不是像其

  • 问题内容: 我正在尝试对Array进行扩展,以允许将可选T的数组转换为非可选T的数组。 例如,这可以写成这样的自由函数: 但是,我无法将此作为扩展。我试图告诉编译器,扩展名仅适用于可选值数组。这是我到目前为止的内容: (它不会编译!) 问题答案: 不可能限制为通用结构或类定义的类型-数组旨在与任何类型一起使用,因此您不能添加适用于类型子集的方法。类型约束只能在声明泛型时指定 实现所需功能的唯一方法