Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions Foundation/NSArray.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,44 @@ extension Array : _ObjectTypeBridgeable {
}
}

extension Array : _ObjectiveCBridgeable {

public static func _isBridgedToObjectiveC() -> Bool {
return Swift._isBridgedToObjectiveC(Element.self)
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSArray {
return _bridgeToObject()
}

public static func _forceBridgeFromObjectiveC(
_ source: NSArray,
result: inout Array?
) {
_forceBridgeFromObject(source, result: &result)
}

public static func _conditionallyBridgeFromObjectiveC(
_ source: NSArray,
result: inout Array?
) -> Bool {
return _conditionallyBridgeFromObject(source, result: &result)
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSArray?
) -> Array {
// `nil` has historically been used as a stand-in for an empty
// array; map it to an empty array instead of failing.
if _slowPath(source == nil) { return Array() }

var result:Array?
_forceBridgeFromObject(source!, result: &result)
return result!
}
}

public class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding {
private let _cfinfo = _CFInfo(typeID: CFArrayGetTypeID())
internal var _storage = [AnyObject]()
Expand Down
39 changes: 39 additions & 0 deletions Foundation/NSDictionary.swift
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,45 @@ extension Dictionary : _ObjectTypeBridgeable {
}
}

// Dictionary<Key, Value> is conditionally bridged to NSDictionary
extension Dictionary : _ObjectiveCBridgeable {
@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSDictionary {
return _bridgeToObject()
}

public static func _forceBridgeFromObjectiveC(
_ d: NSDictionary,
result: inout Dictionary?
) {
_forceBridgeFromObject(d, result: &result)
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSDictionary,
result: inout Dictionary?
) -> Bool {
return _conditionallyBridgeFromObject(x, result: &result)
}

public static func _isBridgedToObjectiveC() -> Bool {
return Swift._isBridgedToObjectiveC(Key.self) &&
Swift._isBridgedToObjectiveC(Value.self)
}

public static func _unconditionallyBridgeFromObjectiveC(
_ d: NSDictionary?
) -> Dictionary {
// `nil` has historically been used as a stand-in for an empty
// dictionary; map it to an empty dictionary.
if _slowPath(d == nil) { return Dictionary() }

var result:Dictionary?
_forceBridgeFromObject(d!, result: &result)
return result!
}
}

public class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding {
private let _cfinfo = _CFInfo(typeID: CFDictionaryGetTypeID())
internal var _storage = [NSObject: AnyObject]()
Expand Down
160 changes: 160 additions & 0 deletions Foundation/NSNumber.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,38 @@ extension Int : _ObjectTypeBridgeable {
}
}

extension Int : _ObjectiveCBridgeable {
public static func _isBridgedToObjectiveC() -> Bool {
return true
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSNumber {
return NSNumber(integer: self)
}

public static func _forceBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Int?
) {
result = x.integerValue
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Int?
) -> Bool {
self._forceBridgeFromObjectiveC(x, result: &result)
return true
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSNumber?
) -> Int {
return source!.integerValue
}
}

extension UInt : _ObjectTypeBridgeable {
public init(_ number: NSNumber) {
self = number.unsignedIntegerValue
Expand All @@ -66,6 +98,38 @@ extension UInt : _ObjectTypeBridgeable {
}
}

extension UInt : _ObjectiveCBridgeable {
public static func _isBridgedToObjectiveC() -> Bool {
return true
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSNumber {
return NSNumber(unsignedInteger: self)
}

public static func _forceBridgeFromObjectiveC(
_ x: NSNumber,
result: inout UInt?
) {
result = x.unsignedIntegerValue
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSNumber,
result: inout UInt?
) -> Bool {
self._forceBridgeFromObjectiveC(x, result: &result)
return true
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSNumber?
) -> UInt {
return source!.unsignedIntegerValue
}
}

extension Float : _ObjectTypeBridgeable {
public init(_ number: NSNumber) {
self = number.floatValue
Expand All @@ -85,6 +149,38 @@ extension Float : _ObjectTypeBridgeable {
}
}

extension Float : _ObjectiveCBridgeable {
public static func _isBridgedToObjectiveC() -> Bool {
return true
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSNumber {
return NSNumber(float: self)
}

public static func _forceBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Float?
) {
result = x.floatValue
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Float?
) -> Bool {
self._forceBridgeFromObjectiveC(x, result: &result)
return true
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSNumber?
) -> Float {
return source!.floatValue
}
}

extension Double : _ObjectTypeBridgeable {
public init(_ number: NSNumber) {
self = number.doubleValue
Expand All @@ -104,6 +200,38 @@ extension Double : _ObjectTypeBridgeable {
}
}

extension Double : _ObjectiveCBridgeable {
public static func _isBridgedToObjectiveC() -> Bool {
return true
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSNumber {
return NSNumber(double: self)
}

public static func _forceBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Double?
) {
result = x.doubleValue
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Double?
) -> Bool {
self._forceBridgeFromObjectiveC(x, result: &result)
return true
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSNumber?
) -> Double {
return source!.doubleValue
}
}

extension Bool : _ObjectTypeBridgeable {
public init(_ number: NSNumber) {
self = number.boolValue
Expand All @@ -123,6 +251,38 @@ extension Bool : _ObjectTypeBridgeable {
}
}

extension Bool: _ObjectiveCBridgeable {
public static func _isBridgedToObjectiveC() -> Bool {
return true
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSNumber {
return NSNumber(bool: self)
}

public static func _forceBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Bool?
) {
result = x.boolValue
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSNumber,
result: inout Bool?
) -> Bool {
self._forceBridgeFromObjectiveC(x, result: &result)
return true
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSNumber?
) -> Bool {
return source!.boolValue
}
}

extension Bool : _CFBridgable {
typealias CFType = CFBoolean
var _cfObject: CFType {
Expand Down
33 changes: 33 additions & 0 deletions Foundation/NSSet.swift
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,39 @@ extension Set : _ObjectTypeBridgeable {
}
}

// Set<Element> is conditionally bridged to NSSet
extension Set : _ObjectiveCBridgeable {
@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSSet {
return _bridgeToObject()
}

public static func _forceBridgeFromObjectiveC(_ s: NSSet, result: inout Set?) {
_forceBridgeFromObject(s, result: &result)
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSSet, result: inout Set?
) -> Bool {
return _conditionallyBridgeFromObject(x, result: &result)
}

public static func _unconditionallyBridgeFromObjectiveC(_ s: NSSet?) -> Set {
// `nil` has historically been used as a stand-in for an empty
// set; map it to an empty set.
if _slowPath(s == nil) { return Set() }

var result:Set?
_forceBridgeFromObject(s!, result: &result)
return result!
}

public static func _isBridgedToObjectiveC() -> Bool {
return Swift._isBridgedToObjectiveC(Element.self)
}
}


public class NSSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSCoding {
private let _cfinfo = _CFInfo(typeID: CFSetGetTypeID())
internal var _storage: Set<NSObject>
Expand Down
37 changes: 37 additions & 0 deletions Foundation/NSString.swift
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,43 @@ extension String : _ObjectTypeBridgeable {
}
}

extension String : _ObjectiveCBridgeable {
public static func _isBridgedToObjectiveC() -> Bool {
return true
}

@_semantics("convertToObjectiveC")
public func _bridgeToObjectiveC() -> NSString {
return _bridgeToObject()
}

public static func _forceBridgeFromObjectiveC(
_ x: NSString,
result: inout String?
) {
return _forceBridgeFromObject(x, result: &result)
}

public static func _conditionallyBridgeFromObjectiveC(
_ x: NSString,
result: inout String?
) -> Bool {
return _conditionallyBridgeFromObject(x, result: &result)
}

public static func _unconditionallyBridgeFromObjectiveC(
_ source: NSString?
) -> String {
// `nil` has historically been used as a stand-in for an empty
// string; map it to an empty string.
if _slowPath(source == nil) { return String() }
var result:String?
_forceBridgeFromObject(source!, result: &result)
return result!
}
}


public struct NSStringCompareOptions : OptionSet {
public let rawValue : UInt
public init(rawValue: UInt) { self.rawValue = rawValue }
Expand Down