# Reading init() parameters inside a static function of a struct

Hello everyone,

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.

Either use everything at a static level:

``````struct RandomStruct {
static func calc(_ int: Int) -> Int {
return int + 2
}
}
``````

or at an instance level:

``````struct RandomStruct {
let int: Int

func calc(_ int: Int) -> Int {
return int + 2
}
}
``````

Mixing both seems unnecessary for your use here.

5 Likes

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.

2 Likes