2014-07-11 145 views
6

* IDE使用objectAtIndex:XCODE 6 beta3版
*語言:斯威夫特+目標C如何迅速

這裏是我的代碼。

目標C代碼

@implementation arrayTest 
{ 
    NSMutableArray *mutableArray; 
} 
- (id) init { 
    self = [super init]; 
    if(self) { 
     mutableArray = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 
- (NSMutableArray *) getArray { 
      ... 
    return mutableArray; // mutableArray = {2, 5, 10} 
} 

Swift代碼

var target = arrayTest.getArray() // target = {2, 5, 10} 

for index in 1...10 { 
    for targetIndex in 1...target.count { // target.count = 3 
     if index == target.objectAtIndex(targetIndex-1) as Int { 
      println("GET") 
     } else { 
      println(index) 
     } 
    } 
} 

我想以下結果:

1 GET 3 4 GET 6 7 8 9 GET 

但是,我的代碼給我的錯誤

libswift_stdlib_core.dylib`swift_dynamicCastObjCClassUnconditional: 
0x107e385b0: pushq %rbp 
...(skip) 
0x107e385e4: leaq 0xa167(%rip), %rax  ; "Swift dynamic cast failed" 
0x107e385eb: movq %rax, 0x6e9de(%rip)  ; gCRAnnotations + 8 
0x107e385f2: int3 
0x107e385f3: nopw %cs:(%rax,%rax) 

if index == target.objectAtIndex(targetIndex-1) as Int { 
// target.objectAtIndex(0) = 2 -> but type is not integer 

我覺得這段代碼是不完整的。 但我找不到解決方案。
幫我TT

+0

「 Swift動態轉換失敗「你的數組不包含'Int',請嘗試打印數組 –

+0

它可能包含'NSNumber' ins tances。 – Sulthan

回答

16

在的OBJ-C,objectAtIndex:2成這個樣子的:

[self.myArray ObjectAtIndex:2] 

在斯威夫特objectAtIndex:2成這個樣子的:

self.myArray[2] 
1

我一直在使用模擬你的數組:

NSArray * someArray() { 
    return @[@2, @5, @10]; 
} 

而且你的代碼編譯並沒有問題上運行的Xcode 6 Beta 3的

但是,你的代碼沒有做你想要什麼,因爲它打印10 * target.count號碼

正確的,它應該是

let target = arrayTest.getArray() as [Int] 

for index in 1...10 { 
    var found = false 

    for targetIndex in indices(target) { 
     if index == target[targetIndex] { 
      found = true 
      break 
     } 
    } 

    if (found) { 
     println("GET") 
    } else { 
     println(index) 
    } 
} 

甚至更​​好

let target = arrayTest.getArray() as [Int] 

for index in 1...10 { 
    if (contains(target, index)) { 
     println("GET") 
    } else { 
     println(index) 
    } 
} 
+0

1. let target = arrayTest.getArray()as [Int] - >'AnyObject'與'Int'不相同 2. if(contains(target,index)){ - >'NSNumber'不是'S.GeneratorType.Element - > L' –

+0

@SaeHyunKim您確定您使用的是最新版本? Beta 3? – Sulthan

+0

我的xcode版本是'版本6.0(6A254o)'(測試版3) –