如何检索 Microsoft Band 1 上已有的应用程序磁贴列表

how to retrieve the list of your application’s tiles already on the Microsoft Band 1

我正在为 iOS 创建 Microsoft Band 1 应用程序 Swift 文档中的这个功能让我眼花缭乱。请帮忙

我知道函数可以充当 Swift 中的类型 即

var exampleFunction: (String, Int) -> String

是一个有两个参数的函数,一个字符串和一个整数,returns一个字符串。

我正在查看的方法在 Xcode(Swift 语言)中表示如下:

tilesWithCompletionHandler(completionHandler: (([AnyObject]!, NSError!) -> Void)!

我相信是说,titlesWithCompletionHandler 接受一个参数,它是 [AnyObject]!, NSError!) -> Void 类型的函数 我不确定围绕整个事物的 ()! 虽然我知道这是强制从可选中获取一个值。这也很难理解。

documentation 的网站上 它写在 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 )

编辑:错误与问题无关。打印语句现在确实打印了,但我进入了错误流程。

我这样做正确吗?

此外,我正在尝试弄清楚如何处理参数的错误部分。我需要使用 a

do {
    try //some code I need to figure out what to write
} catch let error as NSError {
    //code to handle error
}

这个方法调用中有很多内容需要我完全掌握。任何帮助将非常感激。感谢您的宝贵时间!

您的错误处理在 errorFunction 中似乎是正确的。只需修改打印语句,将错误对象也打印出来,看看实际错误是什么。

print("error was not nil, meaning an error occurred... :( \(error)")

您可以进一步查看 error.code 并在您的应用中添加逻辑来处理它。 MSBErrorTypes.h 有一个可能的错误代码列表,您的代码很可能在 300 范围内。

在 Larme 的评论之后,我能够在 Swift 中使用闭包来让它工作。 我很好奇我在问题中使用的方法是否有效...

这也是我在更新我的打印语句后所做的,这也让我了解到您也可以通过这种方式打印错误! :

    myBand.tileManager.tilesWithCompletionHandler( {(tiles:[AnyObject]!, error: NSError!) -> Void in
        if((error) != nil) {
            //handle error
            print("Error in .tilesWithCompletionHandler: \(error)")
        }
    })

这只是一个闭包,显然等同于 Objective-c 中的一个块,我以前并不真正了解它(即块部分)。

感谢大家的帮助!