【发布时间】:2016-12-14 14:30:20
【问题描述】:
我正在将我的代码迁移到 Swift 3,并在我的 do/try/catch 块中看到一堆相同的警告。我想检查分配是否不返回 nil,如果它不起作用,则将某些内容打印到控制台。 catch 块说它“无法访问,因为在 'do' 块中没有抛出错误”。我想用一个 catch 块捕获所有错误。
let xmlString: String?
do{
//Warning for line below: "no calls to throwing function occurs within 'try' expression
try xmlString = String(contentsOfURL: accessURL, encoding: String.Encoding.utf8)
var xmlDict = XMLDictionaryParser.sharedInstance().dictionary(with: xmlString)
if let models = xmlDict?["Cygnet"] {
self.cygnets = models as! NSArray
}
//Warning for line below: "catch block is unreachable because no errors are thrown in 'do' block
} catch {
print("error getting xml string")
}
如何编写一个合适的 try catch 块来处理分配错误?
【问题讨论】:
-
实际上
try必须写在 throwing 方法之前,而不是在包含结果的变量之前 -xmlString = try String(...但该方法真的 throw 在斯威夫特 3? -
唯一的事情是它返回一个 nil 的赋值。为什么 catch 块仍然无法访问?
-
do - catch块至少需要一种引发错误的方法。String(contentsOfURL:似乎没有这样做。顺便说一句:我怀疑String(contentsOfURL:会在 Swift 3 中编译 -
那么 if (xmlString != nil) 会更好地检查分配吗?
-
请阅读与您使用的 Xcode 版本相匹配的文档以找出正确的语法。 Swift 3 beta 中的方法签名可以有很大的不同。
标签: swift error-handling try-catch swift3