首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift 3:“如果让”可选绑定错误

Swift 3:“如果让”可选绑定错误
EN

Stack Overflow用户
提问于 2016-07-04 19:55:29
回答 2查看 2.4K关注 0票数 2

我在Swift 3工作,如果让测试的话,我会遇到以下问题:

代码语言:javascript
运行
复制
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")

if let plistData = try Data(contentsOf: plistUrl!) {
  ...some code
}

编译器在if let语句上显示以下错误:

代码语言:javascript
运行
复制
Initializer for conditional binding must have Optional type, not 'Data'

这里有什么问题,我该怎么解决呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-04 19:57:04

try不返回可选内容。try?有。

票数 4
EN

Stack Overflow用户

发布于 2016-07-06 09:52:42

有了Swift,处理错误和从可能抛出错误的方法中检索数据的正确方法将在"Swift编程语言“的错误处理部分中解释。

因此,根据您的需要,您可以选择以下三种模式中的一种来解决您的问题。

1.使用do-catchtry关键字检索数据和处理错误

您可以使用do-catch语句通过运行一段代码来处理错误。如果do子句中的代码引发错误,则将其与catch子句进行匹配,以确定哪个子句可以处理该错误。

用法:

代码语言:javascript
运行
复制
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")!

let plistData: Data?
do {
    plistData = try Data(contentsOf: plistUrl)
} catch {
    print(error as NSError)
    plistData = nil
}
    
print(plistData)

2.使用try?关键字检索数据并将错误转换为可选值

通过将错误转换为可选值,可以使用try?来处理错误。如果在计算try?表达式时抛出错误,则表达式的值为零。

用法:

代码语言:javascript
运行
复制
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")!
    
guard let plistData = try? Data(contentsOf: plistUrl) else {
    return
}
    
print(plistData)

3.使用try!关键字检索数据并禁用错误传播

有时,您知道抛出函数或方法实际上不会在运行时抛出错误。在这些情况下,您可以在表达式之前编写try!,以禁用错误传播,并将调用包装在运行时断言中,即不会引发错误。如果实际抛出一个错误,您将得到一个运行时错误。

用法:

代码语言:javascript
运行
复制
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")!
    
let plistData = try! Data(contentsOf: plistUrl)
    
print(plistData)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38191472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档