| // This source file is part of the Swift.org open source project |
| // |
| // Copyright (c) 2014 - 2016 Apple Inc. and the Swift project authors |
| // Licensed under Apache License v2.0 with Runtime Library Exception |
| // |
| // See http://swift.org/LICENSE.txt for license information |
| // See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors |
| // |
| |
| extension Array : _ObjectTypeBridgeable { |
| |
| public typealias _ObjectType = NSArray |
| public func _bridgeToObjectiveC() -> _ObjectType { |
| return NSArray(array: map { (element: Element) -> AnyObject in |
| return _SwiftValue.store(element) |
| }) |
| } |
| |
| static public func _forceBridgeFromObjectiveC(_ source: _ObjectType, result: inout Array?) { |
| result = _unconditionallyBridgeFromObjectiveC(source) |
| } |
| |
| @discardableResult |
| static public func _conditionallyBridgeFromObjectiveC(_ source: _ObjectType, result: inout Array?) -> Bool { |
| var array = [Element]() |
| for value in source.allObjects { |
| if let v = value as? Element { |
| array.append(v) |
| } else { |
| return false |
| } |
| } |
| result = array |
| return true |
| } |
| |
| static public func _unconditionallyBridgeFromObjectiveC(_ source: _ObjectType?) -> Array { |
| if let object = source { |
| var value: Array<Element>? |
| _conditionallyBridgeFromObjectiveC(object, result: &value) |
| return value! |
| } else { |
| return Array<Element>() |
| } |
| } |
| } |
| |