我正尝试从我的 firebase 数据库中提取文章,但在此函数的 let author 部分出现 SIGABRT 错误,这是怎么回事?
func getAllArticles(handler: @escaping (_ articles: [Article])-> ()){
var articleArray = [Article]()
REF_ARTICLES.observeSingleEvent(of: .value) { (articleMessageSnapshot) in
guard let articleMessageSnapshot = articleMessageSnapshot.children.allObjects as? [DataSnapshot] else {return}
for article in articleMessageSnapshot {
let content = article.childSnapshot(forPath: "content").value as! String
let author = article.childSnapshot(forPath: "author").value as! String
let twitterHandle = article.childSnapshot(forPath: "twitterHandle").value as! String
let articleTitle = article.childSnapshot(forPath: "articleTitle").value as! String
let article = Article(content: content, author: author, twitterHandle: twitterHandle, ArticleTitle: articleTitle)
articleArray.append(article)
}
handler(articleArray)
}
}
最佳答案
我对 Firebase 一无所知,但根据您发布的内容,我认为这不是您的问题。
此代码 article.childSnapshot(forPath: "author").value
返回 NSNull
意味着它没有找到符合您条件的值。代码为! String
的字面意思是如果值不是 String
就会崩溃。因为 NSNull
不是 String
你会崩溃。
一个解决方案:
let author = article.childSnapshot(forPath: "author").value as? String ?? "No Author"
任何人都可以对所有行执行此操作。另请阅读 Swift optionals和强制展开。
关于ios - 无法在 firebase 中将类型 'NSNull' 的值转换为 'NSString',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51431628/