添加在 ? 或者 !让我的代码看起来很乱,并让我改变它之后的一切。
好吧,它是否凌乱是相当主观的。Swift 以这种方式设计,让您仔细考虑每个可选项。通过这样做,您可以避免许多“在展开可选值时意外发现 nil”的错误。
方法和属性返回nil
是有原因的。通常原因是发生了错误,事情无法完成,或者属性没有有效值。你应该思考这些问题——“如果这个方法返回,我的方法应该怎么做nil
?”
如果你想在值是时做其他事情nil
(即它是 nil 对你的逻辑来说不是致命的),请使用if let
语句。例如
if let scaledCIImage = scaledImage?.ciImage {
// deal with the scaledCIImage
} else {
// do something else to remedy. The method can still continue running
}
如果值为 nil 时您的方法无法继续,那么您可以考虑编写一个保护语句:
guard let scaledCIImage = scaledImage?.ciImage else {
// you need to return some value or call "fatalError()" here
}
如果您绝对确定该值不能为 nil,请强制打开它:
let scaledCIImage = scaledImage!.ciImage!
对于第二个错误,您可以像这样修复它:
// with force unwrapping
let filter = CIFilter(name: "CIAffineTile", withInputParameters:[kCIInputImageKey:scaledCIImage])!.outputImage!
// if let
if let filter = CIFilter(name: "CIAffineTile", withInputParameters:[kCIInputImageKey:scaledCIImage])?.outputImage {
// ...
}
// guard let
guard let filter = CIFilter(name: "CIAffineTile", withInputParameters:[kCIInputImageKey:scaledCIImage])?.outputImage else {
// ...
}
您可以像 rmaddy 所展示的那样,在一个大的if let
或声明中将所有这些链接在一起。guard let