[TL;DR] SE-0033 ports objective-c global strings to swift enums, but the reverse seems to be missing. There should be a swift construct that can be accessible by objective-c.
[Proposal] In a previously implemented swift proposal, the concept of NS_STRING_ENUM and NS_EXTENSIBLE_STRING_ENUM was born. (see: https://github.com/apple/swift-evolution/blob/master/proposals/0033-import-objc-constants.md ) This would enable objective-c global strings to be ported over to swift as an enum and struct respectively. I always found it odd that this interoperability only worked in one direction. I think that enum strings should be accessible to Objective-c when it is marked with the @objc attribute. When an enum string has @objc it should be ported over to objective-c as global strings. // Swift example @objc public enum Food: String { case Calamari case Fish } // Objective-c port typedef NSString *_Nonnull Food; static Food const Food_Calimari = @"Calimari"; static Food const Food_Fish = @"Fish"; The Objective-c port code could be added as part of the generated header file or a framework's umbrella header. When a structs is given the attribute @objcextstring it should become available to objective-c as a class. This attribute will put restrictions on the struct such that it only has static constants and a mandatory property called rawValue. // Swift example @objcextstring public struct Planets { public let rawValue: String public static let Earth = Planets(rawValue: "Earth") public static let Venus = Planets(rawValue: "Venus") } // Objective-c port @interface Planets: NSObject + (instanceType)Earth; + (instanceType)Venus; @end @implementation Planets + (instanceType)Earth { return [[Planets alloc] initWithRawValue: @"Earth"]; } + (instanceType)Venus { return [[Planets alloc] initWithRawValue:@"Venus"]; } @end What do you guys thinks of this proposal? Do you think it will enhance the objective-c to swift interoperability?
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
