Convenience initializer on NSString in swift -


when try create convenience initializer on nsstring in swift fails

error: cannot assign value: 'self' immutable self = "(number)"

extension nsstring {   public init(for number: int) {     self = "\(number)"   } } 

while similar extension on string works

extension string {   public init(for number: int) {     self = "\(number)"   } } 

nsstring class (a reference type) , string struct (a value type), , these have different rules initialization.

value types (struct , enum) not support inheritance , have simpler initialization rules. in particular, can initialize value assigning self:

extension string {     public init(for number: int) {         self = "\(number)"     } } 

class initialization two-phase process in order prevent property values being accessed before initialized. must follow rules, , 1 of them convenience initializer must delegate initializer of same type (and designated initializer):

extension nsstring {     public convenience init(for number: int) {         self.init(string: "\(number)")     } } 

contrary objective-c, swift not (yet?) support "factory initialization", can create , return instance of class or subclass, instead of initiliazing self.

for details, see initialization in "the swift programming language" reference.


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -