| def ObjectiveCBridgeableImplementationForNSValue(Type): |
| return """ |
| extension {Type}: _ObjectiveCBridgeable {{ |
| public func _bridgeToObjectiveC() -> NSValue {{ |
| var myself = self |
| return NSValue(bytes: &myself, objCType: _getObjCTypeEncoding({Type}.self)) |
| }} |
| |
| public static func _forceBridgeFromObjectiveC(_ source: NSValue, |
| result: inout {Type}?) {{ |
| precondition(strcmp(source.objCType, |
| _getObjCTypeEncoding({Type}.self)) == 0, |
| "NSValue does not contain the right type to bridge to {Type}") |
| result = {Type}() |
| source.getValue(&result!) |
| }} |
| |
| public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, |
| result: inout {Type}?) |
| -> Bool {{ |
| if strcmp(source.objCType, _getObjCTypeEncoding({Type}.self)) != 0 {{ |
| result = nil |
| return false |
| }} |
| result = {Type}() |
| source.getValue(&result!) |
| return true |
| }} |
| |
| public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) |
| -> {Type} {{ |
| let unwrappedSource = source! |
| precondition(strcmp(unwrappedSource.objCType, |
| _getObjCTypeEncoding({Type}.self)) == 0, |
| "NSValue does not contain the right type to bridge to {Type}") |
| var result = {Type}() |
| unwrappedSource.getValue(&result) |
| return result |
| }} |
| }} |
| """.format(Type=Type) |
| |
| |
| def ObjectiveCBridgeableImplementationForNSValueWithCategoryMethods( |
| Type, |
| initializer, |
| getter, |
| objCType="_getObjCTypeEncoding" |
| ): |
| return """ |
| extension {Type}: _ObjectiveCBridgeable {{ |
| public func _bridgeToObjectiveC() -> NSValue {{ |
| return {initializer}(self) |
| }} |
| |
| public static func _forceBridgeFromObjectiveC(_ source: NSValue, |
| result: inout {Type}?) {{ |
| precondition(strcmp(source.objCType, |
| {objCType}({Type}.self)) == 0, |
| "NSValue does not contain the right type to bridge to {Type}") |
| result = {getter}(source) |
| }} |
| |
| public static func _conditionallyBridgeFromObjectiveC(_ source: NSValue, |
| result: inout {Type}?) |
| -> Bool {{ |
| if strcmp(source.objCType, {objCType}({Type}.self)) != 0 {{ |
| result = nil |
| return false |
| }} |
| result = {getter}(source) |
| return true |
| }} |
| |
| public static func _unconditionallyBridgeFromObjectiveC(_ source: NSValue?) |
| -> {Type} {{ |
| let unwrappedSource = source! |
| precondition(strcmp(unwrappedSource.objCType, |
| {objCType}({Type}.self)) == 0, |
| "NSValue does not contain the right type to bridge to {Type}") |
| return {getter}(unwrappedSource) |
| }} |
| }} |
| """.format(Type=Type, initializer=initializer, |
| getter=getter, objCType=objCType) |