2016-07-10 11 views
0

Ich verwende Async in meiner IOS-App und brauche ein flüssiges Scrollen für die CollectionView, also versuche ich ASyncDisplayKit zu verwenden, das scheinbar glattes Scrollen hat.Async-Aufruf in nodeBlockForRowAtIndexPath

Alle Proben in Objective gemacht werden, würde Ich mag diesen Teil des Codes übersetzen:

- (ASCellNodeBlock)tableView:(ASTableView *)tableView nodeBlockForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    PhotoModel *photoModel = [_photoFeed objectAtIndex:indexPath.row]; 
    // this will be executed on a background thread - important to make sure it's thread safe 
    ASCellNode *(^ASCellNodeBlock)() = ^ASCellNode *() { 
     PhotoCellNode *cellNode = [[PhotoCellNode alloc] initWithPhotoObject:photoModel]; 
     return cellNode; 
    }; 

    return ASCellNodeBlock; 
} 

Kann mir jemand helfen, diesen Code in Swift bei der Übersetzung?

+0

Welche Art von Objekt ist '_photoFeed'. 'NSArray'? –

+0

Ja, es ist ein Array, das Daten aus einem Rest-Service enthält – Cris

Antwort

1

Ohne etwas mehr über die API zu wissen, scheint die Funktion einen Block ohne Parameter zurückgeben zu wollen, der eine ASCellNode zurückgibt.

func tableView(tableView: UITableView, nodeBlockForRowAtIndexPath indexPath: NSIndexPath) -> ASCellNodeBlock { 

    let photoModel = photoFeed[indexPath.row] 

    let cellNodeBlock:() -> AScellNode = { 
     let cellNode = PhotoCellNode(photoObject: photoModel) 
     return cellNode 
    } 

    return cellNodeBlock 
} 

Und von der easily searchable docs ...

Diese beiden Methoden müssen entweder eine ASCellNode oder eine ASCellNodeBlock zurückzukehren. Ein ASCellNodeBlock ist ein Block, der einen ASCellNode erstellt, der auf einem Hintergrundthread ausgeführt werden kann. Beachten Sie, dass ASCellNodes von ASTableNode, ASCollectionNode und ASPagerNode verwendet werden.