【问题标题】:Key-Value Coding (KVC) with Array/Dictionary in Swift在 Swift 中使用数组/字典进行键值编码 (KVC)
【发布时间】:2014-10-14 17:59:28
【问题描述】:

是否可以使用原生 Swift 数据结构(如数组和字典)进行键值对代码 (KVC)? Swift 中的 NSFoundation 结构仍然可以使用 Key-Value 编码,就像在 Objective C 中一样。

例如,这是有效的:

var nsarray: NSArray = NSArray()
// Fill the array with objects
var array: NSArray = nsarray.valueForKeyPath("key.path")

但这是无效的:

var swiftarray: Array = []
// Fill the array with objects
var array = swiftarray.valueForKeyPath("key.path") // Invalid, produces a compile-time error

【问题讨论】:

  • 你是说最后一行代码的swiftarray吗?
  • 好的,谢谢。刚刚改了。
  • 查看 Matt Long 的这篇文章:cimgf.com/2014/11/05/…

标签: swift key-value-coding


【解决方案1】:

似乎不支持原生 Swift 对象上的 KVC。这是我发现的最优雅的解决方法:

var swiftarray: Array = []
// Fill the array with objects
var array: NSArray = (swiftarray as NSArray).valueForKeyPath("key.path") as NSArray

【讨论】:

    【解决方案2】:

    我发现了这个:

    var array = swiftarray.map({$0["key.path"]! as ObjectType})
    

    【讨论】:

      【解决方案3】:

      您可以执行以下操作:

      let items : Array<String> = (myArray as AnyObject).valueForKeyPath("name") as! Array<String>
      

      【讨论】:

        【解决方案4】:

        这个怎么样:

        let names = array.map { $0.name }
        

        您可以直接引用属性或方法,而不是使用关键路径。

        【讨论】:

          猜你喜欢
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多