NSDictionary, (key:AnyObject, value:AnyObject) 没有成员名下标
Posted
技术标签:
【中文标题】NSDictionary, (key:AnyObject, value:AnyObject) 没有成员名下标【英文标题】:NSDictionary, (key:AnyObject, value:AnyObject) does not have a member name subscript 【发布时间】:2015-04-21 19:05:18 【问题描述】:我正在为 ios 学习 swift,而当我在 youtube 上浏览外部数据库时(Swift:Using External Databases and API's by Skip Wilson ),我找到了以下部分:
service = PostService()
service.getPosts
(response) in
self.loadPosts(response["posts"]! as NSDictionary)
func loadPosts(posts:NSDictionary)
for post in posts
var id = (post["Post"]["id"] as String)
var title = post["Post"]!["title"]! as String
var author = post["Post"]!["author"]! as String
var content = post["Post"]!["content"]! as String
var postObj = Post(id: id, title: title, author: author, content: content)
postsCollection.append(postObj)
dispatch_async(dispatch_get_main_queue())
self.tableView.reloadData()
最初这里的 NSDictionary 是 NSArray,但由于 NSArray 现在只接受 int 作为 key,并且 PostService.getPost() 返回类型为 NSDictionary,所以它不起作用。所以我把它改成了 NSDictionary。
但是,所有的var id,title,author,content都出现错误
(key:AnyObject, value:AnyObject) does not have a member name subscript
似乎我需要将键和值声明为 ,但我现在不确定是否要这样做。 Blow 是 Postservice 的代码:
class PostService
var settings:Settings!
init()
self.settings = Settings()
func getPosts(callback:(NSDictionary)->())
println("get posts")
request(settings.viewPosts,callback)
func request(url:String,callback:(NSDictionary)->())
var nsURL = NSURL(string: url)
println(callback)
let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!)
(data,response,error) in
var error:NSError?
var response = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
callback(response)
task.resume()
我知道这可能是一个非常简单和愚蠢的问题,但我在谷歌上搜索后仍然无法弄清楚。我该怎么办?任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:这里的罪魁祸首是基金会的NSDictionary
,它根本没有下标成员。你可以尝试的是 Swift 的 Dictionary
。如果你一心想要使用NSDictionary
,你可以使用它的objectForKey:
API 来获得它的价值。
【讨论】:
【参考方案2】:在“for post in posts”这一行,post 变量是一个元组:(key:AnyObject, value:AnyObject)。我建议尝试:
for (key, value) in posts
println(key)
println(value)
...检查传入的数据,看看它是否符合您的预期。
【讨论】:
以上是关于NSDictionary, (key:AnyObject, value:AnyObject) 没有成员名下标的主要内容,如果未能解决你的问题,请参考以下文章
NSDictionary 的 NSArray 过滤和 NSDictionary
带有 NSArray 的 UITableview 包含 NSDictionary 和 NSDictionary 包含另一个 NSDictionary
NSPredicate (nsdictionary+array+nsdictionary)