有没有办法在Swift中使用try块之外的不可变变量?

时间:2016-01-01 18:32:29

标签: swift

我知道如果我想在Swift中使用此try块之外的变量 text ,我会编写这样的代码,

var text = NSString()

do {
    text = try NSString( contentsOfURL: url, encoding: NSUTF8StringEncoding ) }
catch let errOpening as NSError {
// ...
}

从以前的几天开始按字节存储时,我的口头禅是尽可能使用常量。因此,在 text 将被加载一次并且从未改变的情况下,我的直觉告诉我将其设为常量。

do {
    let text = try NSString( contentsOfURL: url, encoding: NSUTF8StringEncoding ) }
catch let errOpening as NSError {
// ...
}

但是我无法在try块之外使用加载的文本。有没有办法在Swift这个上下文中将文本视为try块之外的常量?或者这只是一个老人编码的向往,我应该使用var,忘掉它,继续前进?

非常感谢提前!

1 个答案:

答案 0 :(得分:6)

你可以这样做:

let text: String
do {
    text = try String(contentsOfURL: url, encoding: NSUTF8StringEncoding)
}
catch let error as NSError {
    // ...
}

(我使用了String,Swift中的本地字符串类型,而不是NSString。)

假设后面的代码使用textcatch块必须为其分配内容或从封闭函数返回,因为常量必须在使用之前初始化。

请记住,您用于以字符串形式检索URL内容的方法是同步的,因此如果此代码在主线程上运行,您将阻止UI。查看NSURLSession docs以获取有关异步加载URL内容的详细信息,这将避免阻止UI。