【问题标题】:How can convert Mirror To Orginal class or struct using swift language如何使用 swift 语言将镜像转换为原始类或结构
【发布时间】:2019-01-09 08:22:25
【问题描述】:

我有一个关于镜面反射的问题。 我将我的结构转换为镜像以遍历所有属性以获取值,并且在我遍历它并更改属性中的值之后,我需要再次将镜像转换为具有我编辑但我不能的值的原始结构,这很快语言有办法进行这种转换吗?

下面的代码

//MARK:- loop get tags
    func getTags(filter: Any){

        let getTags = Mirror(reflecting: filter)
        for (tag) in getTags.children {

            if let getTag = tag.value as? String {
                if let _ = Int(getTag) {

                }else {
                    if getTag != "" && getTag != "All" {
                        arrayOfTags.append(getTag)
                    }
                }
            }// if let
        }// end for loop

    }

谢谢

【问题讨论】:

  • 你到底需要这个做什么?使用Mirror 很昂贵,而且由于 Swift 是类型安全的语言,你应该知道你正在使用哪些类型
  • 我有一个自定义结构,我使用反射来获取属性并遍历所有。要在编辑后对值执行某些操作,我需要将其转换回自定义结构并通过通知中心发送
  • 你为什么不直接使用你的struct?如果你确切地知道你正在使用什么类型,那么使用Mirror 是没有意义的。
  • 正如我告诉你的,我需要通过循环访问我的自定义结构中的所有属性,它有很多属性。我不能使用结构,因为我必须遍历所有属性和编辑的值取决于某些条件,所以我使用镜像
  • 你有没有设法解决这个问题?

标签: swift swift4.2


【解决方案1】:

如果没有核心内存操作,就无法构造结构。您可以使用Objective C 中仍然可用的函数创建对象。您可以使用setValue forKey 函数设置属性。您的对象需要从 NSObject 派生。

这样做并考虑到所有场景是一个相当大的挑战。有一个 CocoaPod 库可以帮助解决这个问题。看看EVReflection 你可以从你的对象创建一个字典,从你的字典创建一个对象。

【讨论】:

    【解决方案2】:

    有人问了一段时间.. 但以防万一我认为您可能正在寻找 https://cocoapods.org/pods/EVReflection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 2016-02-21
      • 2015-06-09
      • 1970-01-01
      相关资源
      最近更新 更多