Let's say I'd like to calculate something and return the result of that calculation using a static function of a struct like so:
RandomStruct(10).calc()
If I'm not mistaken the value of "10" needs to be read from the struct's init() method and a static function has to be used, so the code would have to look something like the following:
struct RandomStruct {
static func calc() -> Int {
return self.value + 2
}
var value = 0
init(_ val: Int) {
self.value = val
}
}
This of course generates the "Instance member '...' cannot be used on type '...'" error so my question is how exactly can this be done? Is it possible to use a value of an init() parameter in a static/class function? If so, how? Thank you in advance for any tips and suggestions.
Completely agree with @Jon_Shier, but just wanted to mention one other option to achieve somewhat similar result:
func notAtAllAStruct(_ i: Int) -> (() -> Int) {
return { () in i }
}
// which can be invoked as
let theIHolder = notAtAllAStruct(42)
_ = theIHolder() // this is your `.call()`
Yet again, without knowing the details, it sounds like a regular struct with instance methods will be a better option.
In your example “calc” is not a satic func. You’re calling calc on the instance returned by initilizing the struct with 10. I don’t see the need for static on your example.