gpt4 book ai didi

swift - 在 Swift 类中打开文件时处理错误的最佳实践?

转载 作者:行者123 更新时间:2023-11-30 10:08:33 26 4
gpt4 key购买 nike

这两种方法适用于在类内打开文件并处理可能的错误,以及需要在 try block 之外保留的已实现对象:

class Thing1 {   
var text: String = ""

init() {}

func load() throws {
text = try String( contentsOfFile: "/Users/me/text.txt", encoding: NSUTF8StringEncoding )
}
}

let myThing1 = Thing1() // create an empty object

do {
try myThing1.load() } // then load it with the file
catch let error as NSError {
// do something with error
}

class Thing2 {   
let text: String // text is loaded once, used only once
var errorString: String?

init() {
do {
text = try String( contentsOfFile: "/Users/me/text.txt", encoding: NSUTF8StringEncoding )
} catch let error as NSError {
errorString = error.description
text = ""
}
}

func error() -> String? {
return errorString
}
}

let myThing2 = Thing2()

if myThing2.error() != nil {
// do something with errorString = myThing2!.error()
}

从我编码 C++ 的日子来看,更安全的方法通常是第一种,但对于在 try block 之外持续存在的对象,实现要求必须在加载文件之前进行初始化。借助 Swift 中的可选值,第二种方法成为可能,其额外优点是 text 可以像常量一样进行处理。但是错误处理是以非标准类代码相关的方式执行的,这似乎不太安全。

我问这个问题是因为我以后使用此类的所有代码都将取决于这一设计决策,我是 Swift 的新手,我不知道它“在幕后”是如何工作的。任何意见,将不胜感激。由于我对 Swift 很陌生,所以我没有看到其他方法,我也将不胜感激。

最佳答案

您可以使用这两种形式。这取决于更适合的上下文。

例如,如果您在函数中使用调用,无论如何都会抛出错误,那么抛出方法会更方便。如果错误描述并不重要,而您只想检查文本是否为空,则 init 方法可能更合适。

关于swift - 在 Swift 类中打开文件时处理错误的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34614642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com