【问题标题】:Type 'NSObject?' has no subscript members输入“NSObject?”没有下标成员
【发布时间】:2017-06-20 12:54:57
【问题描述】:

我已经搜索过了,真的,在这里问一个问题是我最后的手段......老实说,但请随意对我投反对票,因为“我不得不问”......! 现在开始做事了……

我有一本包含两层“dict > 键”的字典,就是这样!但无论出于何种原因,我似乎无法获得“三”的价值。我这里哪里出错了?

print(mainDict)

/*
 ["keys": {
     one = "one...";
     two = 2;
     three = "three"; // need this one!
 }]
*/

let sub = mainDict["keys"]
print(sub as Any)

/*
 Optional({
     one = "one...";
     two = 2;
     three = "three";
 })
*/

太棒了!到目前为止一切都很好......但是:

let keyThree = mainDict["three"]
print(keyThree as Any)
// nil

let keyThree = sub["three"]
// Type 'NSObject?' has no subscript members

WTH? ...尝试:

【问题讨论】:

  • 请分享字典的初始化
  • @AmrElAdawy: func makeThisPossible(mainDict: [String : NSObject])
  • 分享您最初设置值的代码
  • @Russell:你的意思是let mainDict = (userInfo as? [String: NSObject])!?,调用的函数是optional func application(_ application: NSApplication, didReceiveRemoteNotification userInfo: [String : Any])

标签: swift xcode macos swift3 macos-sierra


【解决方案1】:

函数签名中mainDict 的声明必须是[String :[String:Any]]。或者您可以将其声明为[String:Any],然后,您需要将子转换为[String:Any]

所以函数应该是

func makeItPossible(mainDict : [String:Any]){
   if let sub= mainDict["keys"] as [String:Any], let keyThree = sub["three"]{
        print(keyThree)
}

更新为使用条件绑定。

【讨论】:

  • 我写的几乎一样...... 使用条件绑定代替强制展开来提取值..
  • 嗨 Kumar,请提出更新我的答案作为另一个代码块。我会审查并接受。
  • @KumarKL:请解释一下为什么要使用条件而不是强制?
  • 为了克服崩溃,当强制解包失败时应用程序崩溃所以..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
相关资源
最近更新 更多