Я создаю приложение Microsoft Band 1 для iOS с помощью Swift Эта функция в документации вызывает у меня косоглазие. Пожалуйста помоги.
Я знаю, что функции могут действовать как типы в Swift, т.е.
var exampleFunction: (String, Int) -> String
это функция, которая принимает два параметра, строку и целое число, и возвращает строку.
Метод, на который я смотрю, говорит следующее в Xcode (язык Swift):
tilesWithCompletionHandler(completionHandler: (([AnyObject]!, NSError!) -> Void)!
что, как я полагаю, говорит о том, что titlesWithCompletionHandler
принимает параметр, который является функцией типа [AnyObject]!, NSError!) -> Void
. Я не уверен в том, что ()!
окружает все это, хотя я знаю, что это вытесняет значение из необязательного. это тоже трудно понять .
на сайте документации это написано на Objective-c, который показывает это как определение метода:
[self.client.tileManager tilesWithCompletionHandler:^(NSArray *tiles, NSError *error) {
if (error){
// handle error
}}];
то, что я попытался, - это построить функцию, которая является типом, который запрашивает:
//I had to create this function to match the parameter that the tilesWithCompletionHandler method required
func errorFunction(tileArray: [AnyObject]!, error: NSError!) -> Void {
print("hello")
if((error) != nil) {
//handle error
print("error was not nil, meaning an error occurred... :(")
}
else {
print("i got here")
self.tileArray = tileArray
}
}
затем я создал тип и присвоил его этой функции следующим образом (что исправило ошибки, о которых Xcode беспокоился, когда я вызывал метод, который пытался использовать):
let customFunction: (([AnyObject]!, NSError!) -> Void)! = errorFunction
часть ()!
вокруг типа все еще смущает меня, хотя
наконец, я вызываю функцию, которую мне нужно вызвать, чтобы получить плитки и передать функцию, которую я только что создал.
myBand.tileManager.tilesWithCompletionHandler( customFunction )
Изменить: ошибка не была связана с проблемой. Операторы печати печатаются сейчас, но я попадаю в поток ошибок.
Правильно ли я поступаю?
Кроме того, я пытаюсь понять, как обрабатывать ошибочную часть параметров. Нужно ли мне использовать
do {
try //some code I need to figure out what to write
} catch let error as NSError {
//code to handle error
}
Просто в этом методе много чего нужно, чтобы я полностью понял. Любая помощь приветствуется. Спасибо за ваше время!