我知道如果我想在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,忘掉它,继续前进?
非常感谢提前!
答案 0 :(得分:6)
你可以这样做:
let text: String
do {
text = try String(contentsOfURL: url, encoding: NSUTF8StringEncoding)
}
catch let error as NSError {
// ...
}
(我使用了String
,Swift中的本地字符串类型,而不是NSString
。)
假设后面的代码使用text
,catch
块必须为其分配内容或从封闭函数返回,因为常量必须在使用之前初始化。
请记住,您用于以字符串形式检索URL内容的方法是同步的,因此如果此代码在主线程上运行,您将阻止UI。查看NSURLSession docs以获取有关异步加载URL内容的详细信息,这将避免阻止UI。