CoreData FetchedResults元素追加到数组无数据 是否需类型一致?
问题原因
首先可以明确和类型无关:你声明的commonWords是FetchedResults<CommonWord>类型,它的Element就是CommonWord,和你数组要求的元素类型完全匹配。
添加失败的核心问题是你初始化的basics是可选数组,默认值为nil:你用basics?.append()走可选链调用的时候,因为basics本身是nil,整个调用会直接被跳过,不会真的执行添加逻辑。
修复方法
把basics的声明改成非可选的空数组即可,同时可以优化匹配逻辑的性能:
// 这里返回值也可以直接去掉可选,因为最终不会返回nil var commonWordsUsed: [CommonWord] { // 改这行,初始化为空的非可选数组 var basics = [CommonWord]() print("common words are: \(commonWords)") let languageCommonWords = commonWords.filter { $0.subCategory?.language == language } for languageCommonWord in languageCommonWords { // 用contains(where:)替代filter+count,匹配到第一个符合条件的元素就会停止遍历,性能更高 let isMatched = things.contains { thing in thing.foreign?.lowercased() == languageCommonWord.foreign?.lowercased() && thing.subCategory?.language == language } print("things filter: \(isMatched)") if isMatched { basics.append(languageCommonWord) } } print("basics are: \(basics)") return basics }
补充说明
如果你确实需要保留basics的可选类型,只要在声明时显式赋值为空数组即可:var basics: [CommonWord]? = [],这样可选链的append操作也能正常触发。
内容的提问来源于stack exchange,提问作者Tycho Systems
相关产品推荐
相关产品推荐

