【问题标题】:Accessing NSMutableArray elements in SWIFT在 SWIFT 中访问 NSMutableArray 元素
【发布时间】:2016-08-15 08:43:51
【问题描述】:

我在 swift 中遇到了 NSMutableArray 的问题,我正在开发一个使用indoor.rs iOS idk 构建室内导航应用程序的应用程序,我想在我的地图上显示所有区域并保存其名称和点。这是我的代码:

 var allZones = [AnyObject]()
    for floor in self._currentBuilding!.floors.allValues as! [IDSFloor] {
        allZones.append(floor.zones as [AnyObject])
    }

    if let zone = allZones[index] as? IDSZone, let points = zone.points as? [IDSZonePoint] {
        points.flatMap { (point) in
            print(point.x)
            print(point.y)
        }

    }

结果是:

(
  "<IDSZone: 0x166ede70>",
  "<IDSZone: 0x166edf40>",
  "<IDSZone: 0x166edfe0>",
  "<IDSZone: 0x166ee070>",
  "<IDSZone: 0x166ee0c0>",
  "<IDSZone: 0x166ee130>",
  "<IDSZone: 0x166ee180>",
  "<IDSZone: 0x166ee1c0>",
  "<IDSZone: 0x166ee210>"
)

请问如何检索所有区域数据。这是文档链接:https://indoors.readme.io/docs/zones-1

谢谢。

【问题讨论】:

    标签: ios arrays swift indoor-positioning-system


    【解决方案1】:

    所以,首先我认为你可以声明你的数组:

    let allZones = [IDSZone]let allZones = [AnyObject]

    (如果有错误请告诉我)

    然后:

    allZones.appendContentsOf(floor.zones as [AnyObject]) // Swift 2
    allZones.append(contentsOf: floor.zones as [AnyObject]) // Swift 3
    

    然后你可以像这样访问数组元素:

    allZones.first as? IDSZone
    allZones[<your_index>] as? IDSZone
    ...
    

    获得积分:

    if let zone = allZones[index] as? IDSZone, let points = zone.points as? [IDSZonePoint] {
    points.flatMap { (point) in
        print(point.x)
        print(point.y)
    }
    

    对于名称,您可以根据需要使用 id。

    【讨论】:

    • 还是一样的结果还是不能以正确的格式检索数据
    • 不,我搜索了 idk 文件,我发现一个名为 IDZone 的文件有一个属性 property (nonatomic, strong) NSMutableArray *points;当我试图打印它的值时,我发现:(“”、“”、“”、“”)
    • 因为它有这样的接口:code#import @interface IDSZonePoint : NSObject @property (nonatomic) NSInteger zonepoint_id; @property(非原子)NSInteger x; @property (nonatomic) NSInteger y; @property(非原子)NSInteger sortOrder; @end
    • @MohammedAboelwafa 我更新了答案,如果它可以帮助您获取数据,请告诉我
    • 我更新了问题中的代码,但我有一个错误:/Users/mac/Documents/Projects/MyFirstIndoorsAppIOS/MyFirstIndoorsAppIOS/ViewController.swift:140:31:无法下标类型'[ AnyObject]' 索引类型为 '(UnsafePointer, Int32) -> UnsafeMutablePointer'
    【解决方案2】:

    {

    for floor in _currentBuilding?.floors.allValues as! [IDSFloor] {
            allZones.addObjectsFromArray(floor.zones as [AnyObject])
        }
        let realObject = allZones as NSArray as! [IDSZone]
        for x in 0..<realObject.count {
            let realPoints = NSMutableArray()
            realPoints.addObjectsFromArray(realObject[x].points as [AnyObject])
    
            let zonePoints = realPoints as NSArray as! [IDSZonePoint]
    

    }这就解决了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多