2016-03-29 3 views
1

До Swift 2.2 я мог остановить перечисление, сделав параметр остановки изменяемый с вар, а затем установить его надлежащим образом stop = UnsafeMutablePointer<ObjCBool>.alloc(NSNumber(bool: true).integerValue)Swift 2,2 enumerateObjectsUsingBlock - остановить

Теперь в 2.2 делает параметр изменяемым осуждается так, как я остановить перечисление?

+1

В настоящее время я не могу проверить это, но 'stop.memory = true' должен работать. –

ответ

2

Ваш синтаксис довольно странно ;-)

Это работает как Swift 2.1 и 2.2

let array: NSArray = [1, 2, 3, 4, 5] 
array.enumerateObjectsUsingBlock { (object, idx, stop) in 
    print(idx) 
    if idx == 3 { 
    stop.memory = true 
    } 
} 

Swift 3:

let array: NSArray = [1, 2, 3, 4, 5] 
array.enumerateObjects({ (object, idx, stop) in 
    print(idx) 
    if idx == 3 { 
     stop.pointee = true 
    } 
}) 

Тем не менее - как это было предложено в другой ответ - использовать родной Swift Array.

+0

В 2.2 Я считаю, что inout и var устарели. Однако ваш ответ правильный. Это заставляет меня ждать 2 минуты, чтобы отметить это как-то по какой-то причине ха-ха. –

+0

'inout' не устарел в Swift 2.2 – vadian

+0

Ах да @vadian вы правы. Виноват. –

0

Вы должны использует инструменты Swift предложения вместо:

for (idx, value) in array.enumerate(){ 
    print(idx) 
    if idx == 10 { break } 
} 

Как пояснил в своем комментарии, что вы перечисляете в PHFetchResult, используйте следующие расширения для включения быстрого перечисления:

extension PHFetchResult: SequenceType { 
    public func generate() -> NSFastGenerator { 
     return NSFastGenerator(self) 
    } 
} 

let fetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)] 

let allPhotos = PHAsset.fetchAssetsWithOptions(fetchOptions) 

for (idx, photoAsset) in allPhotos.enumerate() { 
    if idx == 2 { break } 
    print("\(idx) \(photoAsset)") 
} 

Результаты в:

0 <PHAsset: 0x7fa0d9f29c40> B84E8479-475C-4727-A4A4-B77AA9980897/L0/001 mediaType=1/0, sourceType=1, (4288x2848), creationDate=2009-10-09 21:09:20 +0000, location=0, hidden=0, favorite=0 
1 <PHAsset: 0x7fa0d9f29df0> 106E99A1-4F6A-45A2-B320-B0AD4A8E8473/L0/001 mediaType=1/0, sourceType=1, (4288x2848), creationDate=2011-03-13 00:17:25 +0000, location=1, hidden=0, favorite=0 
+0

Я перечисляю PHFetchResult, который не соответствует типу последовательности –

+0

@RichmondWatkins: см. Мое редактирование для 3-строчного расширения для перечисления PFFetchResult быстрым способом. – vikingosegundo

Смежные вопросы