我正在学习swift并尝试编写一个函数来返回一个结构数组。我有一个名为Event
到目前为止,这是我的代码:
/// downloads a list of events for a specific team
static func getEventList(teamPermalink: String) -> [Event]
{
var eventList = []
var url = "http://\(baseURL)/\(teamPermalink)/events.json"
var request = NSMutableURLRequest()
request.URL = NSURL(string: url)
request.HTTPMethod = "GET"
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue())
{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
let json = JSON(data: data)
for var j = 0; j < json.arrayValue?.count; j++
{
let obj = json[j]["title"].stringValue
let e = Event(title: obj!)
println(e.title)
// add e to the array
}
}
return eventList
}
这会在return eventList
上发出错误:'NSArray' is not convertible to '[Event]'
我在这里做错了什么?为什么我不能将Event
附加到eventList
我将评论添加到数组中?
答案 0 :(得分:1)
块中的代码(NSURLConnection.sendAsynchronousRequest之后的部分)异步发生。您的方法将在该代码被触发之前返回。由于检索事件列表需要一些未知时间才能通过,因此更好的解决方案可能是将块传递给您在结果返回时调用的此方法,然后传入事件列表。
至于为什么会出现错误,这是因为你没有给编译器足够的信息来确定数组的类型,所以它的默认值似乎是NSArray。您应该声明eventList,如下所示:
var eventList:[Event] = []