SWIFT 5-使用嵌套结构显示,变异和匹配

时间:2019-12-13 14:07:29

标签: ios json swift struct nested

在我的应用程序中,客户对应用程序内的微服务有不同的访问权限。客户拥有一个管理员,该管理员可以设置其他用户的权限,以控制其用户在应用程序中的访问权限。 所以我将我的PermissionData分成2组。

  1. 可用服务(我的客户可以使用的所有服务)
  2. 权限(所有权限,我客户的管理员都可以为其用户设置)

我的客户 -JSON文件类似于以下内容:

 {
  "AvailableServices": {
    "AssignmentManagement": {
      "AssignmentManager": true
    },
    "UserManagement": {
      "DeviceManager": true,
      "UserManager": true
    }
  },
   more data..

对应的结构:

// MARK: - AvailableServices
struct AvailableServices: Codable {
    let assignmentManagement: AssignmentManagement
    let userManagement: UserManagement

    enum CodingKeys: String, CodingKey {
        case assignmentManagement = "AssignmentManagement"
        case userManagement = "UserManagement"
    }
}

// MARK: - AssignmentManagement
struct AssignmentManagement: Codable {
    let assignmentManager: Bool

    enum CodingKeys: String, CodingKey {
        case assignmentManager = "AssignmentManager"
    }
}

// MARK: - UserManagement
struct UserManagement: Codable {
    let deviceManager, userManager: Bool

    enum CodingKeys: String, CodingKey {
        case deviceManager = "DeviceManager"
        case userManager = "UserManager"
    }
}

我的用户 -JSON-文件类似于以下内容:

"Permissions": {
    "AssignmentManagement": {
      "ServiceAccess": true
    },
    "UserManagement": {
      "DeviceManager": {
        "ServiceAccess": false
      },
      "UserManager": {
        "CreateUser": true,
        "ListUser": true,
        "ModifyUser": false,
        "ServiceAccess": true
      }
    }
  },
   more data..

对应的结构:

// MARK: - Permissions
struct Permissions: Codable {
    let assignmentManagement: AssignmentManagement
    let userManagement: UserManagement

    enum CodingKeys: String, CodingKey {
        case assignmentManagement = "AssignmentManagement"
        case userManagement = "UserManagement"
    }
}

// MARK: - AssignmentManagement
struct AssignmentManagement: Codable {
    let serviceAccess: Bool

    enum CodingKeys: String, CodingKey {
        case serviceAccess = "ServiceAccess"
    }
}

// MARK: - UserManagement
struct UserManagement: Codable {
    let deviceManager: AssignmentManagement
    let userManager: UserManager

    enum CodingKeys: String, CodingKey {
        case deviceManager = "DeviceManager"
        case userManager = "UserManager"
    }
}

// MARK: - UserManager
struct UserManager: Codable {
    let createUser, listUser, modifyUser, serviceAccess: Bool

    enum CodingKeys: String, CodingKey {
        case createUser = "CreateUser"
        case listUser = "ListUser"
        case modifyUser = "ModifyUser"
        case serviceAccess = "ServiceAccess"
    }
}

我当前的流量:

  1. 启动应用
  2. 加载Customer.JSON并将其解码
  3. 用户登录
  4. 加载User.JSON并将其解码
  5. 基于User.JSON显示特定用户的所有微服务

直到这里,一切正常,但是现在管理员登录并想要创建一个新用户并设置他的权限。 从JSON解码后,我无法显示和使用该结构。 我有一个tableView,客户的管理员可以在其中为用户设置不同的权限。

流量应为:

  1. 管理员点击“设置用户XYZ的权限”
  2. 基于Customer.JSON显示所有微服务和权限,客户有权访问
  3. 创建新的PermissionObject并在此对象内设置所有布尔值,管理员已选择
  4. 编码PermissionObject,创建用户并将数据存储在数据库中
问题

问题 2 3

TableView

我什至不知道要解决我的问题我必须搜索哪些关键字。 我阅读了有关镜像类以遍历我的结构的信息。这是一个可靠的建议吗?

编辑:目标是在我的表视图中显示所有可用服务及其可能的权限。在我的tableview内部,管理员可以更改单个权限的值(布尔值)。 也许我的用例的数据结构不正确?!

0 个答案:

没有答案