I agree. These are different proposals that can coexist but I think they should be evaluated separately by the community.
-----Original Message----- From: "Vladimir.S via swift-evolution" <swift-evolution@swift.org> Sent: 27/05/2016 08:05 AM To: "Charles Srstka" <cocoa...@charlessoft.com> Cc: "swift-evolution" <swift-evolution@swift.org> Subject: Re: [swift-evolution] [Proposal] Enums with static stored propertiesfor each case Correct me if I'm wrong, but this idea with accessors is not the same as static properties for each case. The one of ideas of initial proposal - static(!) values would be created only once and it is important in case it is expensive to create such value(or if should be created only once per case) The suggested solution based on 'accessor' - will create assotiated properties each time the enum instace created, for each instance of enum type. We can have something like the example with accessors now : enum MyError: ErrorProtocol { struct MyErrorInfo { let localizedFailureReason: String let url: String } case fileNotFound(url: String) case fileIsCorrupt(url: String) var info : MyErrorInfo { switch self { case fileNotFound(let url) : return MyErrorInfo(localizedFailureReason: "File \"\(url.lowercased())\" not found.", url: url) case fileIsCorrupt(let url) : return MyErrorInfo(localizedFailureReason: "File \"\(url.lowercased())\" is corrupt.", url: url) } } } var e = MyError.fileNotFound(url: "http://something.some") var info = e.info print(info.localizedFailureReason, info.url) But yes, such MyErrorInfo will be created on each `info.` call. This is worse that create MyErrorInfo once per each enum instance initialization, but IMO these solutions are close enough. In any case, I don't see why tuple for enum and enum with `accessor` can not co-exists. On 27.05.2016 2:28, Charles Srstka via swift-evolution wrote: >> On May 26, 2016, at 4:47 PM, Brent Royal-Gordon via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> - Abusing rawValue is just that: an abuse. > > In addition, enums with associated types can’t have rawValues. > > Why is this relevant, you may ask? Because error enums are a huge use case > for something like this. Being able to do the below would be great: > > enum MyError: ErrorProtocol { > accessor var localizedFailureReason: String > accessor var url: NSURL > > case FileNotFound(url: NSURL) { > self.localizedFailureReason = “File \"\(url.lastPathComponent ?? > “”)\” not found.” > self.url = url > } > > case FileIsCorrupt(url: NSURL) { > self.localizedFailureReason = “File \"\(url.lastPathComponent ?? > “”)\” is corrupt.” > self.url = url > } > } > > This would be much cleaner than the existing method of using a switch to > create a userInfo dictionary for creating an NSError to send to > -[NSApplication presentError:] and similar methods. > > Charles > > > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution > _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution