2015-07-03 47 views
1

運行此代碼需要什麼? 嗨,我已經有這部分代碼。它會搜索的結構的陣列,並提供 - 如果發現 - 該項目的索引:在struct中搜索,傳遞數組的索引?

for index in 0 ..< gSteering.count { 
     if gSteering[index].Ext == fileExtension.uppercaseString { 
      priority = index 
      break 
     } 
    } 

我敢肯定,有正在使用的庫函數shoreter和更優雅的方式在SWIFT是。任何提示?

回答

1

類似於

let priority = gSteering.indexOf() { 
    $0.Ext == fileExtension.uppercaseString 
} 

P.S.並且,如果您希望優先級默認爲maxint以防萬一找不到項目:

let priority = gSteering.indexOf() { 
    $0.Ext == fileExtension.uppercaseString 
} ?? Int.max 
+0

謝謝。我看到indexOf只是2.0的一部分。我仍然使用XCode 6.3.2。我想我會改變到7.0。 –

+0

在Swift 1.2中你可以嘗試使用這個:'let priority = find(gSteering,fileExtension.uppercaseString)?? Int.max' – courteouselk

+0

我得到的錯誤: '(C.Index?智力)' 沒有可轉化爲 'Equatable' 於是我說: FUNC ==(L:轉向,R:轉向) - >布爾{ return l.Ext == r.Ext } 但是這對我沒有意義。 :-(當然,它不起作用 Steering是結構類型的名字 –

0

這裏有一個我能想出:

if let index = (gSteering.map{ $0.Ext }).indexOf(fileExtension.uppercaseString) 
{ 
    priority = index 
} 
else 
{ 
    // Not found. 
} 

而這裏的另一個問題:

let priority = gSteering.indexOf { $0.Ext == fileExtension.uppercaseString } 

而這裏的一個直接獲得,而不是索引的對象:

// This will give you an array with all the results that match. 
let priorityObj = gSteering.filter { $0.Ext == fileExtension.uppercaseString }