【问题标题】:Swift Mapping, to and fro快速映射,来回
【发布时间】:2021-02-02 09:02:59
【问题描述】:

我有课

class shortcut: NSObject {
    @objc  var type: String
    @objc  var value: String
    @objc  var raw: UInt8
    init( ...)
    }
}

和一个结构

struct setting: Codable {
    var type: String
    var value: String
    var raw: Int
}

为了将一组快捷方式存储到 .plist 中,我首先将它们映射到一组设置,如下所示:

let settings:[setting] = shortcuts.map({setting(type: $0.type, value: $0.value, raw: Int($0.raw))})

这工作正常。然后我对其进行编码,保存它。在回来的路上,我阅读并解码它,但是当我尝试将 [设置] 映射回 [快捷方式] 时,如下所示:

let shortcuts:[shortcut] = settings.map({shortcut(type: $0.type, value: $0.value, raw: UInt8($0.raw))})

该行被标记为错误,声称

“[setting]”类型的值没有成员“type”

还有更多

我的逻辑哪里出错了?

【问题讨论】:

  • settings 是什么类型?是可选的吗?
  • 第二行中的settings 似乎是[[setting]]?在申请之前有一个“修复”,或者在map() 之前需要一个flatMap()。不相关,但是,以大写开头命名您的类/结构。
  • @sweeper:我将设置声明为“var settings:[setting]?”将其更改为“var settings = [setting]()
  • @sweeper:仍然,错误消息对我来说没有意义
  • Optional<Wrapped> 上有一个 map 方法。你是这么叫的。

标签: swift class struct mapping


【解决方案1】:

就我在 Playground 中的情况而言,它可以工作...

import UIKit

var str = "Hello, playground"


class Shortcut: NSObject {
    @objc  var type: String
    @objc  var value: String
    @objc  var raw: UInt8
    
    init(type: String, value: String, raw: UInt8) {
        
        self.type = type
        self.value = value
        self.raw = raw
        
        super.init()
        
    }

}

struct Setting: Codable {
    var type: String
    var value: String
    var raw: Int
}

let  shortcuts: [Shortcut] = [
    Shortcut(type: "Type 1", value: "Value 1", raw: 1),
    Shortcut(type: "Type 2", value: "Value 2", raw: 2),
]

let settings:[Setting] = shortcuts.map({Setting(type: $0.type, value: $0.value, raw: Int($0.raw))})

dump(settings)


let roundBack:[Shortcut] = settings.map({Shortcut(type: $0.type, value: $0.value, raw: UInt8($0.raw))})


dump(roundBack)

输出:

▿ 2 elements
  ▿ __lldb_expr_1.Setting
    - type: "Type 1"
    - value: "Value 1"
    - raw: 1
  ▿ __lldb_expr_1.Setting
    - type: "Type 2"
    - value: "Value 2"
    - raw: 2
▿ 2 elements
  ▿ <__lldb_expr_1.Shortcut: 0x600001c43780> #0
    - super: NSObject
    - type: "Type 1"
    - value: "Value 1"
    - raw: 1
  ▿ <__lldb_expr_1.Shortcut: 0x600001c43600> #1
    - super: NSObject
    - type: "Type 2"
    - value: "Value 2"
    - raw: 2

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多