我知道如果我想在Swift中使用此try块之外的变量文本,我会这样编写这段代码,
var text = NSString() do { text = try NSString( contentsOfURL: url, encoding: NSUTF8StringEncoding ) } catch let errOpening as NSError { // ... }
从以前的几天开始按字节存储时,我的口头禅是尽可能使用常量.因此,在文本将被加载一次而从未改变的情况下,我的直觉告诉我要使它成为常量.
do { let text = try NSString( contentsOfURL: url, encoding: NSUTF8StringEncoding ) } catch let errOpening as NSError { // ... }
但是我不能在try块之外使用加载的文本.有没有办法在Swift这个上下文中将文本视为try块之外的常量?或者这只是一个老人编码的向往,我应该使用var,忘掉它,继续前进?
提前谢谢了!
你可以做:
let text: String do { text = try String(contentsOfURL: url, encoding: NSUTF8StringEncoding) } catch let error as NSError { // ... }
(我用过String
,Swift中的本地字符串类型,而不是NSString
.)
假设后来的代码使用了text
,则catch
块必须为其分配内容或从封闭函数返回,因为常量必须在使用之前初始化.
请记住,您用于以字符串形式检索URL内容的方法是同步的,因此如果此代码在主线程上运行,您将阻止UI.查找NSURLSession文档以获取有关异步加载URL内容的详细信息,这将避免阻止UI.