> On 9 Jun 2016, at 9:23 PM, Adrian Zubarev via swift-evolution > <[email protected]> wrote: > > So what is the counterpart to AnyClass aka. AnyObject.Type for AnyValue? > There is no and I don’t see any good name for it. > You could just use AnyValue.Type? > More confusion with generalized existentials: > > Any<class> vs. AnyClass aka AnyObject.Type > Any<class> makes it crystal clear that you’re using an instance of a class > not an instance of .Type. It should be consistent. > Any<…> would be used for any of a certain type. So Any<class> to me says ‘any of class’, not ‘any class’. Whereas AnyClass says to me literally ‘any class’. > I’m not proposing for AnyStruct or AnyEnum here, it would be enough to get > AnyValue in Swift, but I did considered both in my proposal. > > Lets say we also would have something like One<A, B> which picks A or B and > we have generalized struct and enum. That said we could create AnyValue like > this typealias AnyValue = One<struct, enum>. Again this is not the main part > of the proposal. > > > -- > Adrian Zubarev > Sent with Airmail > > Am 9. Juni 2016 um 13:09:28, Patrick Smith ([email protected] > <mailto:[email protected]>) schrieb: > >> I find this more confusing, not less. AnyClass suggests that will be any >> class, but it’s not, it’s any class instance. So I think it’s less accurate. >> >> For arguments that AnyStruct and AnyEnum will come, I don’t agree with those >> either. AnyValue would make more sense to me. The fact that a value’s type >> is a struct or enum is irrelevant, just as AnyObject makes no promise about >> the superclass. I don’t believe there would be much or anything you could do >> knowing if something was a struct or enum anyway — both support properties >> and methods, mutations, yet cases can only be used with a concrete enum >> type. So AFAIK, there would no um value in having both AnyStruct and AnyEnum. >> >> So I am happy staying with AnyObject, as it describes what the actual >> instance is. And if AnyValue comes, they would pair nicely together. >> >> Patrick >> >> >>> On 9 Jun 2016, at 8:08 PM, Adrian Zubarev via swift-evolution >>> <[email protected] <mailto:[email protected]>> wrote: >>> >>> I added a draft proposal here: >>> https://github.com/DevAndArtist/swift-evolution/blob/rename_anyobject_remove_anyclass/proposals/nnnn-rename-anyobject-remove-anyclass.md >>> >>> <https://github.com/DevAndArtist/swift-evolution/blob/rename_anyobject_remove_anyclass/proposals/nnnn-rename-anyobject-remove-anyclass.md> >>> Rename AnyObject and remove current AnyClass >>> >>> Proposal: SE-NNNN >>> <https://github.com/apple/swift-evolution/blob/master/proposals/nnnn-rename-anyobject-remove-anyclass.md> >>> Author(s): Adrian Zubarev <https://github.com/DevAndArtist> >>> Status: Awaiting review <x-msg://100/#rationale> >>> Review manager: TBD >>> Introduction >>> >>> From the beginning AnyObject protocol and AnyClass type-alias felt wrong >>> and confusing. This proposal aims to sort out the confusion and provide a >>> consistency for future version of Swift. >>> >>> Swift-evolution thread: [Pitch] Rename AnyObject to AnyClass and drop >>> current AnyClass >>> <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160516/018283.html> >>> Motivation >>> >>> In Swift 3 the standard library will correspond to a particular guideline >>> <https://github.com/apple/swift-evolution/blob/master/proposals/0006-apply-api-guidelines-to-the-standard-library.md>. >>> This means that the Type suffix will be removed almost everywhere. This >>> provides good readability and makes usage of .Type more clearer and >>> consistent. Furthermore this change is a first step towards consistency for >>> generalized existentials >>> <https://github.com/austinzheng/swift-evolution/blob/az-existentials/proposals/XXXX-enhanced-existentials.md>. >>> >>> Short example: >>> >>> -func construct(type: AnyClass) -> AnyObject? >>> +func construct(type: AnyClass.Type) -> AnyClass? { >>> if let objectType = type as? NSObject.Type { >>> return objectType.init() >>> } else { >>> return nil >>> } >>> } >>> Proposed solution >>> >>> Remove current AnyClass type-alias from the standard library and rename >>> current AnyObject protocol to AnyClass. Then migrate existing code from >>> AnyClass to AnyClass.Type and from AnyObject to AnyClass. >>> >>> // Remove completely >>> -public typealias AnyClass = AnyObject.Type >>> >>> // Rename to AnyClass >>> -@objc public protocol AnyObject {} >>> +@objc public protocol AnyClass {} >>> Impact on existing code >>> >>> This change will break existing code, and will require a migrator to >>> translate Swift 2 code into Swift 3 code. >>> >>> Alternatives considered & Future consistency >>> >>> Use generalized existentials with any-class requirement Any<class> instead, >>> which won’t make it into Swift 3 in time: >>> AnyClass equals Any<class> or typealias AnyClass = Any<class> >>> AnyClass.Type equals Any<class>.Type >>> Add AnyValue type-alias with generalized existentials and value keyword: >>> AnyValue equals Any<value> or typealias AnyValue = Any<value> >>> AnyValue.Type equals Any<value>.Type >>> Or instead AnyValue add AnyStruct and AnyEnum type-aliases: >>> AnyStruct equals Any<struct> or typealias AnyStruct = Any<struct> >>> AnyEnum equals Any<enum> or typealias AnyEnum = Any<enum> >>> AnyStruct.Type equals Any<struct>.Type >>> AnyEnum.Type equals Any<enum>.Type >>> Example: >>> >>> // Accept any type that conforms to `SomeProtocol` >>> func doSomething(with interface: SomeProtocol) { ... } >>> >>> // Accept any class that conforms to `SomeProtocol` >>> // We use shorthand syntax for existentials here (SE-0095) >>> func doSomething(with interfaceReference: AnyClass & SomeProtocol) { ... } >>> func doSomething(with interfaceReference: Any<class> & SomeProtocol) { ... } >>> >>> // Accept any value that conforms to `SomeProtocol` >>> // Missing counterpart to `AnyClass` >>> func doSomething(with interfaceValue: AnyValue & SomeProtocol) { ... } >>> func doSomething(with interfaceValue: Any<value> & SomeProtocol) { ... } >>> >>> // Or more specific value types: >>> func doSomething(with interfaceValue: AnyStruct & SomeProtocol) { ... } >>> func doSomething(with interfaceValue: Any<struct> & SomeProtocol) { ... } >>> >>> func doSomething(with interfaceValue: AnyEnum & SomeProtocol) { ... } >>> func doSomething(with interfaceValue: Any<enum> & SomeProtocol) { ... } >>> >>> >>> >>> -- >>> Adrian Zubarev >>> Sent with Airmail >>> >>> _______________________________________________ >>> swift-evolution mailing list >>> [email protected] <mailto:[email protected]> >>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >> > > > _______________________________________________ > swift-evolution mailing list > [email protected] <mailto:[email protected]> > https://lists.swift.org/mailman/listinfo/swift-evolution > <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
