私は迅速なアプリを持っています。メインクラスviewdidloadはobjective-c関数を呼び出します。Swiftで続行する前に、目的のC関数の結果を待つ
objective-c関数はデータベースをスキャンし、それをNSMutableArrayに格納します。
swift関数でNSMutable配列を使用する必要があります。
問題はこれです:私はswiftでobjective-c関数を呼び出してから配列を使用しますが、配列が塗りつぶされる前に使用されます(nil)。
したがって、配列を呼び出す前にobjective-c関数からの戻り値が正常に返されるまで待つ必要があります。
私は複数の例を見てきましたが、ある言語から別のものには見られませんでした。一部の人々は使用完了ハンドラを言っている他の人は、最高の方法ではないと言う。その後、他の人は通知を出しました。
私はIOSに新しいですので、あなたの助けに感謝します。
EDITED追加したコード
scanTable関数(対物C):
#import "ScanTable.h"
#import "Mapper.h"
@implementation ScanTable
- (void) scanTableDo {
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 (task.exception) {
NSLog(@"The request failed. Exception: [%@]", task.exception);
}
if (task.result) {
AWSDynamoDBPaginatedOutput *paginatedOutput = task.result;
NSMutableArray *scanResult = [[NSMutableArray alloc] initWithArray:paginatedOutput.items]; //// ADDED /////
}
return nil;
}];
}
@end
メイン関数(SWIFT):
override func viewDidLoad() {
super.viewDidLoad()
let scanTable = ScanTable();
scanTable.scanTableDo();
let swiftArray = scanTable.scanResult
}
コードを表示できますか? – AdamPro13
OCとSwiftを扱うのは面倒です。あなたの質問はあまりにも一般的です。 – Lumialxk
意見を聞かないでください。あなたが実装して働くことができるものを見つけてください。プログラミングの経験が増えるにつれて、関わる問題をより深く理解し、なぜ1つのアプローチが他のアプローチより優れているのかを理解する必要があります。 – Avi