我正在寻找一种改进这种代码模式的方法:
struct Struct {
let i: Int
init?(i: Int?) {
guard let unwrappedI = i else { return nil }
self.i = unwrappedI
}
}
unwrappedI
删除临时变量会很好。有什么建议么?
我正在寻找一种改进这种代码模式的方法:
struct Struct {
let i: Int
init?(i: Int?) {
guard let unwrappedI = i else { return nil }
self.i = unwrappedI
}
}
unwrappedI
删除临时变量会很好。有什么建议么?
我会说:
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 ?)
好吧,我肯定想多了……我需要睡觉。
struct Struct {
let i: Int
init?(i: Int?) {
if let i = i { self.i = i }
else { return nil }
}
}