Yes, this is the solution that I’m using, but:
1. I think following the pattern of ErrorProtocol would be better
2. It doesn’t explain why I can use String in one instance and not the other
when they are both typed the same:
// Can use String or Notification.Name
@nonobjc final public func addObserver(_ observer: AnyObject, selector
aSelector: Selector, name aName: Name, object anObject: AnyObject?)
// Can only use Notification.Name
public func post(name aName: NSNotification.Name, object anObject:
AnyObject?)
-Kenny
> On Jun 29, 2016, at 5:11 PM, Brent Royal-Gordon <[email protected]>
> wrote:
>
>> While converting to Swift3, my biggest hurdle was figuring out what to do
>> with a custom NSNotification. In Objective-C, it’s a plain NSString, and the
>> same in Swift2.
>>
>> I assumed in Swift3 that it worked like ErrorProtocol and errors as enums,
>> but as it turns out, you need to create a custom instance of
>> Notification.Name(“MyNotificationName”). This does not seem very Swifty, and
>> I think it would work better if there was a NotificationNameProtocol and you
>> could create enums with String raw values.
>
> The migrator constructs the Notification.Name instances at the call site, but
> I believe the *actual* intent is that you should assign them to a
> constant—either one in your own type:
>
> // Old
> let MyClassWillFooNotificationName = "MyClassWillFoo"
> // New:
> class MyClass: … {
> static let WillFoo = Notification.Name("MyClass.WillFoo")
> }
>
> Or in an extension to `Notification.Name` itself.
>
> --
> Brent Royal-Gordon
> Architechies
>
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution