2015-10-25 1 views
-1

Я немного новичок в Swift и Objective-C (и я имею в виду, что я начал на прошлой неделе), так что, если это дублирующий вопрос, я сожалею о том, авансовый.Swift + Objective C - дополнительный аргумент 'withCompletionBlock' в вызове

Короче говоря, у меня, похоже, возникают проблемы с вызовом метода. Одна часть кода находится в Objective-C, а другая часть - в Swift. Я импортировал файл Objective-C в файл Swift через мостовой файл заголовка, если это помогает.

Декларация метода (в Objective-C):

- (NSUInteger)fetchTeamsForEventKey:(NSString *)eventKey withCompletionBlock:(void (^)(NSArray *teams, NSInteger totalCount, NSError *error))completionBlock { 
    NSString *apiMethod = [NSString stringWithFormat:@"event/%@/teams", eventKey]; 

    NSUInteger taskId = [[TBAKit sharedKit] callArrayMethod:apiMethod modelClass:[TBATeam class] andCompletionBlock:^(NSArray *modelObjects, NSInteger totalCount, NSError *error) { 
     completionBlock(modelObjects, totalCount, error); 
    }]; 
    return taskId; 
} 

Реализация метода (Swift):

TBAKit.fetchTeamsForEventKey("2015cacg", withCompletionBlock: {(teams:NSArray, totalCount:NSInteger, error:NSError) in //The error appears in this line. 
    if error { 
    NSLog("Unable to fetch event - %@", error.localizedDescription) 
    return 
    } 

    teamList = teams 
}) 

Исходный код метода декларации в этом GitHub Repo: https://github.com/ZachOrr/TBAKit. Это в файле TBAKit/TBAKit + EventMethods.m

Edit: Я также попытался код с каждым из следующих действий:

-> UInt 

и

-> Int 

Edit 2: Таким образом, решение, упомянутое в t4nhpt, действительно работало так, как планировалось, но, в свою очередь, представилась другая проблема. Я должен был заменить

teamList = teams 

с

self.teamList = teams 

Сейчас я получаю сообщение об ошибке: «не может присвоить значение типа„anyobject“к значению типа„[TBATeam]“» на вкладке линия

self.teamList = teams 

Моя декларация переменной

var teamList = [TBATeam]() 

Редактировать 3: Я решил проблему, указанную в EDIT 2, путем преобразования каждого объекта внутри команд в TBATeam. Извините за тупую ошибку.

+0

Я попытался, но это дает мне другую ошибку: не может ссылаться на 'fetchTeamsForEventKey' со списком аргументов типа (String, withCompletionBlock: (NSArray, NSInteger, NSError) -> _) –

+0

Предоставьте полное точное сообщение об ошибке i вопрос. – zaph

+0

Когда метод подсказки Xcode, в параметре 'comCompletionBlock', вы должны нажать клавишу« Enter », и он будет генерировать код для вас. Это более точно, чем вы печатаете. – t4nhpt

ответ

0

Попробуйте это:

TBAKit.sharedKit().fetchTeamsForEventKey("2015cacg") { (teams, totalCount, error) -> Void in 
      // your code 
     } 
+0

Спасибо. Это помогло решить проблему дополнительных аргументов, но теперь она создала ошибку в строке «teamList = teams», говорящей «Неявное использование« я »в закрытии, использование« я ». чтобы сделать семантику захвата явной. " И со мной, будучи новым в этом, я действительно не знаю, что это значит. –

+0

Я понял ошибку, которую я делал. Теперь у меня новая ошибка. Я объяснил это в ** Редактирование 2: ** выше –