gpt4 book ai didi

ios - Swift 计算属性返回值

转载 作者:行者123 更新时间:2023-11-28 12:17:47 25 4
gpt4 key购买 nike

我有一个计算属性,如果失败,它应该返回一个对象或 nil。

var findRequest: Book {
get {
var foundRequest: Book!
API.requestBook(book: bookRequest) { book in
if book != nil {
foundRequest = book!
} else {
print("Could not find book")
foundRequest = nil
}
}
return foundRequest
}
}

当我运行代码时,在返回的 foundRequest 行上解包 Optional 值错误时意外发现 nil。看起来代码跳过了我的闭包函数并直接返回。

谢谢

最佳答案

您的实现存在多个问题。首先,如果 foundRequest 的值有可能为 nil,则不应将其定义为隐式解包可选。其次,您在异步函数 API.requestBook 的完成处理程序之外返回值,因此您在 foundRequest 可以获取值之前返回,因此您正在返回nil 的默认值,由于隐式解包的可选声明,将被强制解包,因此会出现错误。

此外,您不应该在计算属性的 getter 内部发出异步请求,因为计算属性应该立即返回一个值。

您应该完全更改您的实现,使 findRequest 成为一个在完成处理程序中返回 Book 类型值的函数。

func findRequest(bookRequest: URLRequest, completion: @escaping (Book?->Void)){
API.requestBook(book: bookRequest) { book in
if let book = book {
completion(book)
} else {
print("Could not find book")
completion(nil)
}
}
}

你可以这样调用函数:

findRequest(bookRequest: yourRequest, completion: { book in
if let book = book {
//use the returned value
} else {
print("Book not found")
}
})

您可能需要根据输入参数 book 的类型更改 URLRequestbookRequest 类型。

关于ios - Swift 计算属性返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45879372/

25 4 0
文章推荐: php - Wordpress bloginfo ('stylesheet_url'),这是从哪里来的?
文章推荐: ios - 如何避免 Reusable Cell 的复制行为
文章推荐: css - 我可以将带有 ''
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com