目的のCクラス関数が完了したら、Swiftで配列を作成しようとしています。私は目的のCの関数でDoWithBlockを使用していますが、私はIOSに慣れていて、実際に正しい順序で実行されているかどうか試してみようとしています。Objective C to Swift - DoWithBlock
私はここで解決策を見つけるのに手伝ってもらえましたが、私がその答えにとどまったことが正しいのかどうかは分かりません。新しい質問になるはずです。
- (void)scanTableDoWithBlock:(void(^)(NSArray *scanResult, NSError *error))handler {
AWSDynamoDBObjectMapper *dynamoDBObjectMapper = [AWSDynamoDBObjectMapper defaultDynamoDBObjectMapper];
AWSDynamoDBScanExpression *scanExpression = [AWSDynamoDBScanExpression new];
scanExpression.limit = @10;
[[dynamoDBObjectMapper scan:[Mapper class]
expression:scanExpression]
continueWithBlock:^id(AWSTask *task) {
if (task.error) {
NSLog(@"The request failed. Error: [%@]", task.error);
if (handler != nil) {
handler(nil, task.error);
}
}
if (task.exception) {
NSLog(@"The request failed. Exception: [%@]", task.exception);
}
if (task.result) {
AWSDynamoDBPaginatedOutput *paginatedOutput = task.result;
NSMutableArray *scanResult = [[NSMutableArray alloc] initWithArray:paginatedOutput.items]; //// ADDED /////
if (handler != nil) {
handler([scanResult copy], nil);
}
}
return nil;
}];
}
@end
その後迅速クラスに私はObjective Cの関数を呼び出していると私はこのような配列を作成する期待しています:
客観Cクラスで私はこのようなブロックで関数を呼び出しています
override func viewDidLoad() {
super.viewDidLoad()
let scanTable = ScanTable();
scanTable.scanTableDoWithBlock { (scanResult, error) in
let swiftArray = scanTable.scanResult
}
はコード客観C関数が完了したときにのみ実行「swiftArray = scanTable.scanResultましょう」または、それは他の前に実行された場合、それはただ純粋な運だろうを行います。私はすぐにブロックを使用することに関する良い文書を見つけることができませんでした。あなたの助けのための
おかげ
///は、上に。細かいことをループのためのスキャン機能の中で配列が作成され、Iされている(SWIFT viewwilappear対物Cスキャン機能を呼び出すことができますでの私の最新の試みを編集します私は両方の配列を取得しています迅速な側面は、nillのコードが実行されているとして戻って////
class RateSongsViewController: UIViewController {
override func viewWillAppear(animated: Bool)
{
super.viewWillAppear(animated)
let scanTable = ScanTable();
scanTable.scanTableDoWithBlock { (scanResult, error) in
let swiftArray = scanTable.scanResult
if (scanTable.scanResult == nil){
print(" scanResult ARRAY IS NILL")
} else {
print(" scanResult ARRAY IS NOT NILL")
}
if (swiftArray == nil){
print(" SWIFT ARRAY IS NILL")
} else {
print(" SWIFT ARRAY IS NOT NILL")
}
}
}
ここに素早いブロックを理解するのに良い記事です。http://fuckingswiftblocksyntax.com/(ウェブサイト名は厄介です:)) – raki
ありがとう@raki私はそれをチェックアウトします。 –