我正在使用 Swift 为 iOS 创建一个 Microsoft Band 1 应用程序 文档中的这个功能让我眼花缭乱。请帮忙。
我知道函数可以充当 Swift 中的类型 即
var exampleFunction: (String, Int) -> String
是一个函数,它有两个参数,一个字符串和一个整数,并返回一个字符串。
我正在查看的方法在 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 )
编辑:错误与问题无关。打印语句现在确实打印了,但我进入了错误流程。
我的做法是否正确?
此外,我正在尝试弄清楚如何处理参数的错误部分。我需要使用一个
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 范围内。
关于ios - 如何检索 Microsoft Band 1 上已有的应用程序磁贴列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34410284/