代码之家  ›  专栏  ›  技术社区  ›  Chris Campbell

领域-返回数组列表

  •  0
  • Chris Campbell  · 技术社区  · 6 年前

    我有一个名为mood的领域对象,我试图以[字符串]列表的形式返回字段活动中的所有值,其中mood=great

    我的领域对象看起来像:

    Results<Mood> <0x7fce164851a0> (
        [0] Mood {
            mood = Great;
            comment = test;
            activities = Friends;
            time = 8:06 PM;
            date = 4/10/18;
            symptom = down;
        },
        [1] Mood {
            mood = Sad;
            comment = ;
            activities = Date;
            time = 6:22 PM;
            date = 4/14/18;
            symptom = up;
        },
        [2] Mood {
            mood = Sad;
            comment = ;
            activities = Date;
            time = 7:40 PM;
            date = 4/14/18;
            symptom = Night;
        },
        [3] Mood {
            mood = Sad;
            comment = ;
            activities = Date;
            time = 7:41 PM;
            date = 4/14/18;
            symptom = Dry;
        },
        [4] Mood {
            mood = Awful;
            comment = this is an example data for the app!;
            activities = Date;
            time = 2:17 PM;
            date = 4/15/18;
            symptom = Lost;
        }
    )
    

    我想返回如下列表

    [“向下”] 因为这是一项情绪=良好等的活动

    我尝试过:

    func getGreatMoodActivity() -> [String]{
        let greaMoodActivity = Set(realm.objects(Mood.self).filter("mood = 'Great'") as! [String])
        return getGreatMoodActivity()
    }
    

    但这个错误导致了崩溃

    无法强制转换“RealmSwift”类型的值。结果' (0x10f520810)至“NSArray”(0x10ce35008)。

    有没有办法解决这个问题?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Chris Campbell    6 年前

    这个 filter 操作将保持过滤器 Mood 对象,因此其返回值将为 Results<Mood> 你显然不能强迫自己 Array<String>

    看来你实际上是想 map 这个 情绪 将筛选条件与其匹配的对象 symptom 属性,类型为 String .为了实现你的目标,你需要打电话 地图 过滤后 情绪 对象。

    此外,您的返回值完全有缺陷,您希望返回存储在变量中的数组 greatMoodActivity 不要递归调用函数。

    func getGreatMoodActivity() -> [String]{
        let greatMoodActivity = realm.objects(Mood.self).filter("mood = 'Great'").map({$0.symptom})
        return Array(greatMoodActivity)
    }