From 74bf59eb9f10e32e5f66b28d93fbf7dd05c93e8d Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Thu, 3 Dec 2015 12:13:49 -0800 Subject: [PATCH 1/4] NSArray.getObjects: Use correct source index --- Foundation/NSArray.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift index d6bcf79cf1..2bd48fa99f 100644 --- a/Foundation/NSArray.swift +++ b/Foundation/NSArray.swift @@ -184,7 +184,7 @@ public class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NS } } for idx in 0.. Date: Thu, 3 Dec 2015 13:43:23 -0800 Subject: [PATCH 2/4] Add a test for NSArray.getObjects --- TestFoundation/TestNSArray.swift | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/TestFoundation/TestNSArray.swift b/TestFoundation/TestNSArray.swift index f2b8a1ee4b..1dcb8683b1 100644 --- a/TestFoundation/TestNSArray.swift +++ b/TestFoundation/TestNSArray.swift @@ -26,6 +26,7 @@ class TestNSArray : XCTestCase { ("test_BasicConstruction", test_BasicConstruction), ("test_enumeration", test_enumeration), ("test_sequenceType", test_sequenceType), + ("test_getObjects", test_getObjects), ] } @@ -70,4 +71,17 @@ class TestNSArray : XCTestCase { XCTAssertEqual(res, ["foo", "bar", "baz"]) } + func test_getObjects() { + let array : NSArray = ["foo", "bar", "baz", "foo1", "bar2", "baz3",].bridge() + var objects = [AnyObject]() + array.getObjects(&objects, range: NSMakeRange(1, 3)) + XCTAssertEqual(objects.count, 3) + let fetched = [ + (objects[0] as! NSString).bridge(), + (objects[1] as! NSString).bridge(), + (objects[2] as! NSString).bridge(), + ] + XCTAssertEqual(fetched, ["bar", "baz", "foo1"]) + } + } From 6ac6dc9cb789a8782a857e07ebce70d23eb948c4 Mon Sep 17 00:00:00 2001 From: Adlai Holler Date: Thu, 3 Dec 2015 13:45:09 -0800 Subject: [PATCH 3/4] Reimplement NSArray.getObjects --- Foundation/NSArray.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift index 2bd48fa99f..327ca19094 100644 --- a/Foundation/NSArray.swift +++ b/Foundation/NSArray.swift @@ -177,14 +177,15 @@ public class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NS /// - Experiment: This is a draft API currently under consideration for official import into Foundation /// - Note: Since this API is under consideration it may be either removed or revised in the near future public func getObjects(inout objects: [AnyObject], range: NSRange) { + objects.reserveCapacity(objects.count + range.length) + if self.dynamicType === NSArray.self || self.dynamicType === NSMutableArray.self { - if range.location == 0 && range.length == count { - objects = _storage - return - } + objects.insertContentsOf(_storage[range.toRange()!], at: 0) + return } + for idx in 0.. Date: Fri, 4 Dec 2015 01:24:38 -0800 Subject: [PATCH 4/4] Clean up implementation --- Foundation/NSArray.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift index 327ca19094..d4b16c8019 100644 --- a/Foundation/NSArray.swift +++ b/Foundation/NSArray.swift @@ -180,13 +180,11 @@ public class NSArray : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NS objects.reserveCapacity(objects.count + range.length) if self.dynamicType === NSArray.self || self.dynamicType === NSMutableArray.self { - objects.insertContentsOf(_storage[range.toRange()!], at: 0) + objects += _storage[range.toRange()!] return } - for idx in 0.. Int {