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 <spes...@apple.com> 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 < > swift-users@swift.org> 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 > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users > > >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users