从cloudkit swift中获取不同的值

时间:2018-01-24 13:22:59

标签: ios swift cloudkit

我有一个数据库学生列: courseID,StudentID,FirstName,LastName

现在学生可以参加一门以上的课程。

我有一个屏幕,我只取了学生的名字。 显然我得到了重复的值。现在我知道我可以将courseID的类型从字符串更改为字符串列表来解决这个问题但这意味着很多编码都会发生变化。无论如何我可以修改我的CKQuery以获取不同的值吗?

截至目前,代码如下所示:

func FetchRecords(){
        print("Fetch Records")
        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: "Students", predicate: predicate)
        let operation = CKQueryOperation(query: query)
        operation.desiredKeys = ["FirstName","LastName","StudentID"]

        var newStud = [Student]()
        print("Begin")
        operation.recordFetchedBlock = { (record)  in
            let stud_rec = Student()
            print(record["FirstName"] as! String)
            stud_rec.FName = (record["FirstName"] as! String)
            stud_rec.LName = (record["LastName"] as! String)
            stud_rec.MatrN = (record["StudentID"] as! String)
            newStud.append(stud_rec)
        }

1 个答案:

答案 0 :(得分:1)

Amrita我认为存在数据模型设计问题,您会感受到其中一个后果 - 很多重复的值"。

根解决方案是通过记录类型避免courseID和studentID之间的许多关系。例如,注册以跟踪哪个学生参加哪一年的哪个课程。这当然需要进行大量的编码更改。"你也想避免。

所以也许你可以试试这个快速表面补丁来获取不同的值"您可以使用Swift Set操作来处理获取的重复项,如下所示:

let fetchedDuplicate = ["Jon", "Sid", "Tom", "Jon"]
let uniqueSet = Set(fetchedDuplicate) // it is now {"Jon", "Sid", "Tom"}
let uniqueArray = Array(uniqueSet) // ["Jon", "Sid", "Tom"]

我希望它有所帮助。