initialization - What's the use of expression.init() in Swift -


the swift programming language guide, page language reference -> expressions, section postfix expressions -> initializer expression talks syntax

<expression>.init(<initializer arguments>) 

when use (apart self.init() , super.init() covered in other parts of grammar)? seems me in case above expression valid (and expression not self or super), can do:

<expression>(<initializer arguments>) 

while syntax template looks this:

<expression>.init(<initializer arguments>) 

the grammar defines initializer-expression as:

initializer-expression → postfix-expression . init­ 

note invocation arguments not included. matches constructs a.init, , necessary because init keyword, a.init not match explicit-member-expression (which requires identifier rather keyword member name).

initializer expressions part of grammar because can invoke initializer belongs class not direct superclass of class writing (c invokes a.init in example):

class {     var property: string     init() {         property = "hello"     } }  class b: {     init() {         super.init()         property = "goodbye"     } }  class c: b {     init() {         super.init()         a.init()     } }  c().property // "hello" 

i don't think there many use cases this, both grammar , compiler allow , example compiles , runs correctly.

you can use initializer expression in global scope normal initializer. following 2 lines equivalent:

string(10) string.init(10) 

Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -