> On Mar 17, 2016, at 12:04 AM, Adrian Kashivskyy via swift-evolution 
> <[email protected]> wrote:
> 
> I have a couple of ideas regarding the API of ObjectiveCBridgeable. My 
> general thought is to improve upon the existing _ObjectiveCBridgeable 
> protocol, not just make it public. The main idea would be to make it more 
> "Swifty" by:
> 
> 1. Removing inout arguments which look like implementation artifacts and 
> converting them into return values

They are implementation artifacts, because these methods are called by C++ code 
in the runtime (for dynamic casting), and inout is *much* easier to work with 
because you know it’s always passed indirectly.

One could almost clearly clean up the primary interface to make it more natural 
in Swift, then use defaulted implementations for the more runtime-friendly 
entrypoints.

> 2. Converting static functions to initializers

Yes, that’s reasonable, but see the above.

> 3. Removing isBridgedToObjectiveC() method since it doesn't introduce any 
> useful information

It tells us, dynamically, whether the bridging is actually possible, and is 
used by the runtime. For example:

func foo<T>(foo: Array<T>) {
  if let obj = foo as? NSArray {
    // whether we get here depends on T, dynamically
  }
}

struct SomeStruct { }

foo([SomeStruct]()) // “Not bridged"
foo([String]())  // “Bridged"

If you look at the implementation of Array’s conformance to 
_ObjectiveCBridgeable, for example, it dynamically checks whether its element 
type is _ObjectiveCBridgeable.

Note that isBridgedToObjectiveC is a hack because we don’t have conditional 
conformances, i.e., we can’t say that Array<T> conforms to 
_ObjectiveCBridgeable when T is representable in Objective-C. That’s obviously 
not something to be fixed by this proposal, but hopefully it helps illustrate 
why isBridgedToObjectiveC matters.

Perhaps you and Russ can work together to clean up _ObjectiveCBridgeable within 
the proposal? I’ll have more comments on the proposal soon-ish.

        - Doug

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to