所以我有一个结构,调用
DemoType
,我希望调用者用两个属性初始化它——但是我也希望公开设置第二个属性的能力,
问题是在设置之前
prop2
,有很多逻辑需要首先运行。
这意味着有很多重复的代码行
我试图通过将逻辑保持在一个位置来减少它。我想把它全放进去
setProp2
struct DemoType {
var prop1: String
var prop2: String
init?(p1:String, p2:String) {
self.prop1 = p1
let potentialFailure = true
guard potentialFailure else { return nil }
// Like 20 lines of logic here manipulating p2
self.prop2 = p2
}
mutating func setProp2(_ p2:String) {
let potentialFailure = true
guard potentialFailure else { return }
// Like 20 lines of logic here manipulating p2
self.prop2 = p2
}
}
所以从逻辑的角度,我可以打电话给
setProp
一切都会很酷的
struct DemoType {
var prop1: String
var prop2: String
init?(p1:String, p2:String) {
self.prop1 = p1
self.setProp2(p2)
}
mutating func setProp2(_ p2:String) {
let potentialFailure = true
guard potentialFailure else { return }
// Like 20 lines of logic here manipulating p2
self.prop2 = p2
}
}
不幸的是,编译器会抱怨我没有在
init
,
和
我也希望初始值是
fallable
,所以它可以返回
nil
如果某些检查失败,那么我不确定如何用这个实现来实现它,正如我所做的那样
设置比例2
回来吧,那我怎么打电话呢(
初始化
)返回
零
?
我想我要做的一定是可能的,但我只是不知道编译器正在寻找的语法。或者,我可以将这20行逻辑拉到它自己的方法中,并让这两行都调用它,这样也会更干净,但因为这两行都调用
self.prop2
最后,我希望能有一种方法,只在一个地方
自我支持2
已分配