Was it ever explained why the syntax is different? -- Chris McIntyre
> On Jul 18, 2017, at 6:46 PM, Jens Persson via swift-users > <[email protected]> wrote: > > That is not true. Structs can have delegating initializers but they cannot be > marked with `convenience` (only the initializers of class types can). > > This is very clear from both the documentation and the compiler: > > (1) The Swift Programming language (Swift 4): > "Swift defines two kinds of initializers for *class* types to help ensure all > stored properties receive an initial value. These are known as designated > initializers and convenience initializers." > > (2) The compiler: > > struct S { > var a, b: Int > init(_ a: Int, _ b: Int) { > self.a = a > self.b = b > } > convenience init(_ ab: Int) { // <-- Error > self.init(ab, ab) > } > } > The error message is: > Delegating initializers in structs are not marked with 'convenience' > The suggested fix is to remove the word convenience. > > Please reread my previous post, perform the steps I describe (looking at > Quick Help, also try jump to definition for that `init` and you'll see it is > marked with `convenience` even though it is in a struct), also look at the > link to the documentation for the Int init, it too is marked with > convenience, even though Int is a struct. > > /Jens > > >> On Tue, Jul 18, 2017 at 9:46 PM, Slava Pestov <[email protected]> wrote: >> Hi Jens, >> >> While I’m not familiar with the integer API in the standard library, structs >> and enums certainly can have convenience initializers. They must delegate to >> another initializer (either convenience or designated) rather than >> initializing the fields of the type one by one. >> >> Slava >> >>> On Jul 18, 2017, at 6:46 AM, Jens Persson via swift-users >>> <[email protected]> wrote: >>> >>> Start a command line project in Xcode 9 beta 3 and copy paste this single >>> line of code into main.swift >>> >>> let _ = UInt8.init(extendingOrTruncating: UInt64(123456)) >>> >>> Now look at Quick Help while placing the cursor on `init` and then on >>> `extendingOrTruncating`. >>> >>> Note that (and how) the documentation for the initializer differs depending >>> on where you place the cursor. >>> >>> If the cursor is on `init`, the initializer is shown to be a convenience(!) >>> initializer even though structs (such as UInt8) cannot have convenience >>> initializers, right? >>> >>> Even the official documentation for this and several other initializer like >>> eg: >>> https://developer.apple.com/documentation/swift/int/2885075-init >>> clearly shows convenience initializers in structs. >>> >>> By the way, .init(extendingOrTruncating:) doesn't show in the list of >>> completions for "UInt8.init" but it does for "UInt8(". >>> >>> >>> Can anyone explain what's going on? >>> >>> Are these known issues that will go away in time for Xcode 9 GM? >>> >>> /Jens >>> >>> _______________________________________________ >>> swift-users mailing list >>> [email protected] >>> https://lists.swift.org/mailman/listinfo/swift-users >> > > _______________________________________________ > swift-users mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-users
