Initialize variables in place:
final class View {
var set: Set<SomeClass> = []
var optional: SomeClass?
let simpleInitializer: SomeClass = .init()
let verboseInitializer: SomeClass = .init(
arg1: 1,
arg2: 2,
arg3: 3,
arg4: 4
)
let tupleArray: [(SomeClass, SomeClass, SomeClass, SomeClass)] = [
makeContent(),
makeContent(),
makeContent()
]
var array: [SomeClass] = .init()
var closure: (() -> Void)?
required init() { ... }
}
In constructor:
final class View {
var set: Set<SomeClass>
var optional: SomeClass?
let simpleInitializer: SomeClass
let verboseInitializer: SomeClass
let tupleArray: [(SomeClass, SomeClass, SomeClass, SomeClass)]
var array: [SomeClass]
var closure: (() -> Void)?
required init() {
self.set = []
self.simpleInitializer = .init()
self.verboseInitializer = .init(
arg1: 1,
arg2: 2,
arg3: 3,
arg4: 4
)
self.tupleArray = [
makeContent(),
makeContent(),
makeContent()
]
self.array = .init()
}
}
(* Types and namings are just virtual.)
So, I have many Swift files that goes like the first and cleaning/optimizing them up but facing a concern.
-
While the latter makes variable declarations simpler and easy to glance at (So I prefer), will there be consequences? More specifically, will there be dynamic (runtime) effect with the latter? (*In practice, some classes are inherited from
NSView
orNSObject
, so Obj-C is also in concern.) -
Or... is it just a matter of style of coding that does not worth mind?
With this simple test only difference I see is
main:
xor eax, eax
ret
+ variable initialization expression of output.Test.value : Swift.Int:
+ xor eax, eax
+ ret
Those 3 additional lines with in place initialization. Unfortunately I have no clue what this would mean in practice.
I imagine that not seeing ‘variable initialization expression’ here might mean dynamic assignment will be done, which is I'm not quite sure.
Any advices or suggestions are welcome, thanks in advance.