微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何解码从didSelectRowAt传递到另一个TabBar的嵌套的数组

如何解决如何解码从didSelectRowAt传递到另一个TabBar的嵌套的数组

我一直想弄清楚如何将整个JSON解码的数组(不确定它是否称为数组?)从一个TabBar传递到另一个

我终于设法弄清楚了如何使用此YouTube https://www.youtube.com/watch?v=GL8-eM93EvQ将selectedRow数据传递到另一个标签,但是我仅成功传递了某些项目,而不是整个解码后的JSON。

我当前的JSON看起来像这样,我将JSON作为可解码的对象,并且对间隔进行了unkeyedContainer(间隔内的值是time(x)和value(y):)

    [
  {
    "id":1,"title":"AirBender","durationMinutes": 25,"intervals:":[
      [0.00,50],[10.00,55],73]
    ]
  }
]

在表格视图TabBar中,didSelectRowAt包含:

    func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) {
    
    let tabbar = tabBarController as! BaseTBController
    tabbar.workoutTitle = jsonErgWorkouts[indexPath.row].title <- This works great
//    tabbar.workoutIntervals = jsonErgWorkouts[indexPath.row] <- This doesn't work
  }

这是我在(主)TabBarController类中所拥有的

import UIKit

class BaseTBController: UITabBarController {

  var workoutTitle: String = "Select a Workout"
  // var workoutIntervals: [workoutList] = [] <- I don't kNow what to declare here
  
    override func viewDidLoad() {
        super.viewDidLoad()
        print("BaseTBController title:\(workoutTitle)")
    }
}

我什至试图将其声明为Decodable结构的一部分

    struct workoutList: Decodable {
      let id: Int
      let title: String
      let durationMinutes: Double
      let intervals: [workoutIntervals]
    }

struct workoutIntervals: Decodable {
  let t: Double // time in min
  let w: Int    // %FTP
  
  init(from decoder: Decoder) throws {
    var arrayContainer = try decoder.unkeyedContainer()
    t = try arrayContainer.decode(Double.self)
    w = try arrayContainer.decode(Int.self)
  }
}

编辑:我只是试图将ExerciseIntervals设置为ANY]

var workoutIntervals = [Any]()

,它可以将ExerciseIntervals发送到另一个选项卡。但是,现在我不知道该如何访问内部数据,因为它与可解码的结构无关。

通过以下方式打印出值:

    for (intervalIndex,workoutIntervals) in tabbar.workoutIntervals.enumerated() {
  print("intIndex:\(intervalIndex) time:\(workoutIntervals)")

结果是:

intIndex:0 time:workoutIntervals(t: 0.0,w: 50)
intIndex:1 time:workoutIntervals(t: 10.0,w: 55)
intIndex:2 time:workoutIntervals(t: 10.0,w: 73)

但是就像我说的,我不知道如何到达t:和w :,因为它与结构无关。

谢谢!

解决方法

感谢您提供信息。因此BaseTBController就像应用程序的 model 部分一样。是对的吗?因此,选项卡可以请求从中获取信息或侦听更改的是单例模型。 我认为,要向另一个选项卡中的其他视图控制器通知所选项目,如果您使用的是合并,则可以使用delegatenotificationsPublishSubject RxSwift

然后,数据结构如何无关紧要,您可以将所需内容传递给任何这些选项卡。 (例如struct本身或其中的数组)。这够清楚吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。