当前位置:  开发笔记 > IOS > 正文

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

如何解决《有没有办法在Swift中使用try块外的不可变?》经验,为你挑选了1个好方法。

我知道如果我想在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,忘掉它,继续前进?

提前谢谢了!



1> jbg..:

你可以做:

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.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有