【发布时间】:2014-06-08 22:26:35
【问题描述】:
我正在尝试将现有项目迁移到 Swift,这更像是一种学习练习,但我认为我遇到了一个看起来很基本的问题,我认为这可能与我对任何对象。
我创建了一个由多个变量组成的对象,并初始化为:
var customObject:MycustomObject = MYcustomObject()
然后我使用 NSURLConnection 来检索 JSON 数据,这一切似乎都在正常工作,因为 jsonArray 正在填充数据
jsonArray = NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSArray
然后我循环遍历数组并尝试解析数据,这就是我遇到问题的地方,for 循环将详细信息默认为 AnyObject。
for details:AnyObject in jsonArray {
parseDetail(details as NSDictionary)
}
问题与 integerValue 有关,它会生成“无法从 'AnyObject' 向下转换为非@objc ....”错误
func parseDetail(element: NSDictionary ) {
self.customObject.stringValue = element["id"] as String
self.customObject.integerValue = element["type"] as Integer
}
NSString 和 String 的工作方式似乎也存在一些差异,到目前为止,我的理解是,在使用 Swift 时,我应该使用本机类型 Sting、Float Integer 等。如果我使用 NSString,则 stringValue 会正确显示在调试窗口中,但使用 String 类型时,我收到以下信息:
{
core = {
_baseAddress = Builtin.RawPointer = 0x0b227f49
_countAndFlags = 1073741828
_owner = Some {
Some = (instance_type = Builtin.RawPointer = 0x0b227f40 -> 0x006d58f0 (void *)0x006d58c8: __NSCFString)
}
}
}
对不起,这有点长,但是有关于线程的任何信息,这是我的下一个挑战吗?
NSThread.detachNewThreadSelector(Selector: parseDetail(), toTarget: self, withObject: nil)
【问题讨论】:
-
你为什么使用 nsarry 而不是 swift 数组?
-
您是否尝试过不在循环中指定 at 类型? (即
for details in jsonArray) -
第一个问题的答案在这篇文章中得到了很好的解答:Working with Cocoa Data Types - Arrays 至于第二个问题,a search 不仅展示了相关文档,还展示了使用这种方法的示例应用程序。