我正在寻找改善这种代码模式的方法:
struct Struct {
let i: Int
init?(i: Int?) {
guard let unwrappedI = i else { return nil }
self.i = unwrappedI
}
}
很高兴删除unwrappedI
临时变量。有什么建议吗?
答案 0 :(得分:3)
我会说:
struct Struct {
let i: Int
init?(i: Int?) {
if i == nil {return nil}
self.i = i!
}
}
我认为这可以捕捉你最早退出的愿望并避免你试图避免的if/else
,没有中间变量。要解开i
,只需解开它!不需要if let
或guard let
或任何那些花哨的东西。
(另一方面,我要问:如果将nil
传递给初始化程序被视为失败,为什么要首先接受一个Optional?)
答案 1 :(得分:1)
嗯,我确信过度思考......我需要睡觉。
struct Struct {
let i: Int
init?(i: Int?) {
if let i = i { self.i = i }
else { return nil }
}
}