斯威夫特3:“如果让”可选绑定错误
问题描述:
我在斯威夫特3个工作,和我遇到麻烦以下,如果让测试:斯威夫特3:“如果让”可选绑定错误
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")
if let plistData = try Data(contentsOf: plistUrl!) {
...some code
}
编译器显示的,如果让语句下面的错误:
Initializer for conditional binding must have Optional type, not 'Data'
这里有什么问题,我该如何解决?
答
try
不返回可选项。 try?
呢。
答
1.检索数据,并使用
2.检索数据,并使用
3.使用
使用Swift,处理错误和从可能引发错误的方法中检索数据的正确方法在“Swift编程语言”的Error Handling部分进行了说明。
因此,根据您的需要,您可以选择以下三种模式之一来解决您的问题。
1.检索数据,并使用do-catch
和try
关键字
您使用
do-catch
声明运行的代码块来处理错误处理错误。如果do
子句中的代码引发错误,则会将其与catch
子句进行匹配,以确定哪个子句可以处理该错误。
用法:
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?
表达式时发生错误,则表达式的值为零。
用法:
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")!
guard let plistData = try? Data(contentsOf: plistUrl) else {
return
}
print(plistData)
3.使用try!
关键字
有时候你知道投掷函数或方法将不检索数据,并禁用错误传播,事实上,在运行时抛出一个错误。在这种情况下,您可以在表达式之前编写
try!
以禁用错误传播并将该调用包装在运行时断言中,以避免引发错误。如果实际发生错误,您将收到运行时错误。
用法:
let plistUrl = Bundle.main().urlForResource("Books", withExtension: "plist")!
let plistData = try! Data(contentsOf: plistUrl)
print(plistData)
这奏效了!我知道它必须是一些愚蠢简单的东西。 –