| |
| // Swift 3 sees the ObjC class NSRuncibleSpoon as the class, and uses methods |
| // with type signatures involving NSRuncibleSpoon to conform to protocols |
| // across the language boundary. Swift 4 sees the type as bridged to |
| // a RuncibleSpoon value type, but still needs to be able to use conformances |
| // declared by Swift 3. |
| |
| // Swift 4 |
| |
| import SomeObjCModule |
| import SomeSwift3Module |
| |
| public func testMixAndMatch(bridged: RuncibleSpoon, unbridged: NSRuncibleSpoon) { |
| let objcInstanceViaClass |
| = SomeObjCClass(someSwiftInitRequirement: bridged) |
| let objcClassAsProtocol: SomeSwift3Protocol.Type = SomeObjCClass.self |
| let objcInstanceViaProtocol |
| = objcClassAsProtocol.init(someSwiftInitRequirement: unbridged) |
| |
| var bridgedSink: RuncibleSpoon |
| var unbridgedSink: NSRuncibleSpoon |
| |
| let swiftPropertyViaClass = objcInstanceViaClass.someSwiftPropertyRequirement |
| bridgedSink = swiftPropertyViaClass |
| let swiftPropertyViaProtocol = objcInstanceViaProtocol.someSwiftPropertyRequirement |
| unbridgedSink = swiftPropertyViaProtocol |
| |
| objcInstanceViaClass.someSwiftMethodRequirement(bridged) |
| objcInstanceViaProtocol.someSwiftMethodRequirement(unbridged) |
| |
| let swiftInstanceViaClass |
| = SomeSwift3Class(someObjCInitRequirement: unbridged) |
| let swiftClassAsProtocol: SomeObjCProtocol.Type = SomeSwift3Class.self |
| let swiftInstanceViaProtocol |
| = swiftClassAsProtocol.init(someObjCInitRequirement: bridged) |
| |
| let objcPropertyViaClass = swiftInstanceViaClass.someObjCPropertyRequirement |
| unbridgedSink = objcPropertyViaClass |
| let objcPropertyViaProtocol = swiftInstanceViaProtocol.someObjCPropertyRequirement |
| bridgedSink = objcPropertyViaProtocol |
| |
| swiftInstanceViaClass.someObjCMethodRequirement(unbridged) |
| swiftInstanceViaProtocol.someObjCMethodRequirement(bridged) |
| |
| _ = bridgedSink |
| _ = unbridgedSink |
| } |
| |
| public protocol SomeSwift4Protocol { |
| init(someSwiftInitRequirement: RuncibleSpoon) |
| func someSwiftMethodRequirement(_: RuncibleSpoon) |
| var someSwiftPropertyRequirement: RuncibleSpoon { get } |
| } |
| |
| extension SomeObjCClass: SomeSwift4Protocol {} |
| |
| public class SomeSwift4Class: NSObject { |
| public required init(someObjCInitRequirement x: RuncibleSpoon) { |
| someObjCPropertyRequirement = x |
| } |
| public func someObjCMethodRequirement(_: RuncibleSpoon) {} |
| public var someObjCPropertyRequirement: RuncibleSpoon |
| } |
| |
| extension SomeSwift4Class: SomeObjCProtocol {} |