gpt4 book ai didi

ios - 如何将我的 Card 转换为 NSSet?

转载 作者:行者123 更新时间:2023-11-29 01:16:27 26 4
gpt4 key购买 nike

我正在尝试将新的 Card 添加到 Deck 卡片中,但在尝试将我的卡片保存到该卡片组的 cards 时遇到问题。如何将其转换为 NSSet

func saveQA(question: String, answer: String) {
let currentDeckName = deckName
let entity = NSEntityDescription.entityForName("Card", inManagedObjectContext: managedContext)
let newQA = Card(entity: entity!, insertIntoManagedObjectContext: managedContext)
newQA.question = question
newQA.answer = answer
currentDeckName!.cards = newQA

do {
try managedContext.save()
userCards.append(newQA)
}
catch {
let saveError = error as NSError
print(saveError)
}
}

最佳答案

在这里,您尝试将 Card 分配给需要 NSSet 的属性。卡片不是集合(尽管它可以是集合中的一个对象)。

currentDeckName!.cards = newQA

利用类型安全

由于您使用 Swift 编写代码,因此您应该做的第一件事就是使用 Swift 类型,例如 Set 而不是 NSSet。在您的 Deck+CoreDataProperties.swift 中,将您的关系从 NSSet? 更改为一组类型化的卡片。

@NSManaged var cards: Set<Card>

这不仅告诉 Swift cards 是一个 Set,而且指定集合中的对象将是 Card

您总是希望为关系声明特定类型以从语言的类型安全中获益。这允许编译器阻止您将 Card 以外的任何内容添加到套牌的卡片组中。

将卡片添加到卡片组

您可以使用常用的 Set 方法,例如 insert 将卡片插入牌组中。

currentDeckName.cards.insert(newQA)

但是,更简单的方法是在卡片本身上使用反向关系。换句话说,告诉新卡它属于这个牌组:

newQA.deck = currentDeckName

这会自动将卡片添加到牌组的卡片组中。

它的代码有点少,而且通常越少越好阅读和理解。

说到可读性,您可能需要考虑将 currentDeckName 重命名为 currentDeck,因为该对象是一个 Deck,而不是牌组的名称.

关于ios - 如何将我的 Card 转换为 NSSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com