[swift-users] What is up with names not being Strings any more in Swift 4?

Joe Groff jgroff at apple.com
Mon Jul 17 11:12:59 CDT 2017


> On Jul 17, 2017, at 9:04 AM, Manfred Schubert <dev at schubert-it.com> wrote:
> 
> 
>> Am 17.07.2017 um 17:47 schrieb Joe Groff <jgroff at apple.com>:
>> 
>> Yeah, this is the intended use pattern for these namespaced constant. You don't need the `rawValue:` label, though:
>> 
>> extension NSImage.Name {
>> static let myImage = Name("myImage")
>> }
> 
> It would be possible to do the same thing as an extension to String without making the default/simple case more complicated. So I would have said this is overkill, but I'm fine with it.

By making it a separate type, though, it lets you define constants without polluting String's namespace, and lets the type system prevent typos or accidental misuse of a name.

> 
> What remains is the question whether it is possible to create NSBindingNames in a safe way, like from #selector().

If you want to ensure that the string value corresponds to a declaration, maybe you could use #keyPath, which ought to be interchangeable with a string literal but checked by the compiler.

-Joe


More information about the swift-users mailing list