斯威夫特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?呢。

+0

这奏效了!我知道它必须是一些愚蠢简单的东西。 –

使用Swift,处理错误和从可能引发错误的方法中检索数据的正确方法在“Swift编程语言”的Error Handling部分进行了说明。

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


1.检索数据,并使用do-catchtry关键字

您使用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)