| // RUN: %target-run-simple-swift | %FileCheck %s |
| // REQUIRES: executable_test |
| |
| // REQUIRES: objc_interop |
| |
| import Foundation |
| |
| extension NSObject { |
| @objc func frob() { |
| print("I've been frobbed!") |
| } |
| |
| @objc var asHerself : NSObject { |
| return self |
| } |
| |
| @objc var blackHoleWithHawkingRadiation : NSObject? { |
| get { |
| print("e+") |
| return nil |
| } |
| set { |
| print("e-") |
| } |
| } |
| } |
| |
| var o = NSObject() |
| |
| func drop(_ x: NSObject?) {} |
| |
| // CHECK: true |
| print(o.responds(to: "frob")) |
| // CHECK: true |
| print(o.responds(to: "asHerself")) |
| // CHECK: false |
| print(o.responds(to: "setAsHerself:")) |
| // CHECK: true |
| print(o.responds(to: "blackHoleWithHawkingRadiation")) |
| // CHECK: true |
| print(o.responds(to: "setBlackHoleWithHawkingRadiation:")) |
| |
| // Test #selector for referring to methods. |
| // CHECK: true |
| print(o.responds(to: #selector(NSObject.frob))) |
| |
| // CHECK: I've been frobbed! |
| o.frob() |
| // CHECK: true |
| print(o === o.asHerself) |
| // CHECK: e+ |
| drop(o.blackHoleWithHawkingRadiation) |
| // CHECK: e- |
| o.blackHoleWithHawkingRadiation = NSObject() |
| |
| // Use of extensions via bridging |
| let str = "Hello, world" |
| // CHECK: I've been frobbed! |
| str.frob() |