| // RUN: %target-run-simple-swift | %FileCheck %s |
| // REQUIRES: executable_test |
| |
| // REQUIRES: objc_interop |
| |
| import Foundation |
| |
| var a: NSArray = ["one", 2, [1,2,3]] |
| var a_m: NSMutableArray = ["two", 12, [11,12,13]] |
| |
| // CHECK: one |
| // CHECK: 2 |
| // CHECK: ( |
| // CHECK: 1, |
| // CHECK: 2, |
| // CHECK: 3 |
| // CHECK: ) |
| for x in a { |
| print(x) |
| } |
| |
| // CHECK: two |
| // CHECK: 12 |
| // CHECK: ( |
| // CHECK: 11, |
| // CHECK: 12, |
| // CHECK: 13 |
| // CHECK: ) |
| for x in a_m { |
| print(x) |
| } |
| |
| class Canary { |
| var x: Int |
| |
| deinit { print("dead \(x)") } |
| init(_ x: Int) { self.x = x } |
| func chirp() { print("\(x)") } |
| } |
| |
| autoreleasepool { |
| print("making array") |
| |
| var b: NSArray = NSArray(objects: [Canary(1), Canary(2), Canary(3)], count: 3) |
| |
| print("iterating array") |
| |
| // CHECK-DAG: 1 |
| for x in b { |
| (x as! Canary).chirp() |
| break |
| } |
| |
| // CHECK-DAG: exiting |
| print("exiting") |
| } |
| // CHECK-DAG: dead 1 |
| // CHECK-DAG: dead 2 |
| // CHECK-DAG: dead 3 |
| // CHECK: exited |
| print("exited") |
| |
| var d : NSDictionary = [415 : "Giants" , 510 : "A's"] |
| var d_m : NSMutableDictionary = [1415 : "Big Giants", 11510 : "B's"] |
| |
| // CHECK: 510 => A's |
| for (key, value) in d { |
| print("\(key) => \(value)") |
| } |
| |
| // CHECK: 11510 => B's |
| for (key, value) in d_m { |
| print("\(key) => \(value)") |
| } |
| |
| var s = NSSet(object: "the most forward-thinking test yet") |
| var s_m = NSMutableSet(object: "the next most forward-thinking test yet") |
| |
| // CHECK: the most forward-thinking test yet |
| for x in s { |
| print(x) |
| } |
| |
| // CHECK: the next most forward-thinking test yet |
| for x in s_m { |
| print(x) |
| } |
| |
| // Enumeration over a __SwiftDeferredNSArray |
| // CHECK: 3 |
| // CHECK: 2 |
| // CHECK: 1 |
| var a2 = [3, 2, 1] |
| var nsa2: NSArray = a2._bridgeToObjectiveC() |
| for x in nsa2 { |
| print(x) |
| } |
| |
| class X : CustomStringConvertible { |
| init(_ value: Int) { self.value = value } |
| var value: Int |
| var description: String { return "X(\(value))" } |
| } |
| |
| // Enumeration over a _ContiguousArrayBuffer |
| // CHECK: X(3) |
| // CHECK: X(2) |
| // CHECK: X(1) |
| var a3 = [X(3), X(2), X(1)] |
| var nsa3: NSArray = a3._bridgeToObjectiveC() |
| for x in nsa3 { |
| print(x) |
| } |