快速反射导致任何不可能的零值

快速反射导致任何不可能的零值,第1张

概述我正在尝试使用快速反射来检查对象中的更改,以便我只能将更改的属性发送到服务器.我的一些属性是可选的.为了比较这些值,我需要打开它们,但是,当然,你只能打开实际值,而不是nil值.所以,在比较它们之前,我需要检查其中一个值是否为零. 在我的 *** 场上,我尝试了以下方法: import UIKitclass myClass{ var fieldOne:String? var fie 我正在尝试使用快速反射来检查对象中的更改,以便我只能将更改的属性发送到服务器.我的一些属性是可选的.为了比较这些值,我需要打开它们,但是,当然,你只能打开实际值,而不是nil值.所以,在比较它们之前,我需要检查其中一个值是否为零.

在我的 *** 场上,我尝试了以下方法:

import UIKitclass myClass{    var fIEldOne:String?    var fIEldTwo:Int?    var fIEldThree:float?}var oneMyClass = myClass()oneMyClass.fIEldOne = "blah"oneMyClass.fIEldThree = 3.5var oneOtherClass = myClass()oneOtherClass.fIEldOne = "stuff"oneOtherClass.fIEldTwo = 3let aMirror = Mirror(reflecting: oneMyClass)let bMirror = Mirror(reflecting: oneOtherClass)for thing in aMirror.children{    for thing2 in bMirror.children    {        if thing.label! == thing2.label!        {            print("property: \(thing.label!)")            print("before: \(thing.value)")            print("after: \(thing2.value)")            print("")            //let myTest = thing.value == nil ? "nil" : "not nil"        }    }}

它会生成以下输出:

property: fIEldOnebefore: Optional("blah")after: Optional("stuff")property: fIEldTwobefore: nilafter: Optional(3)property: fIEldThreebefore: Optional(3.5)after: nil

如您所见,预期属性显示为“nil”.但是,如果取消注释let语句,则会收到错误消息:

playground52.swift:37:38: error: value of type 'Any' (aka 'protocol<>') can never be nil,comparison isn't allowed

然而,我们从输出中知道它是零.这怎么可能,我该怎么办呢?

解决方法 那看起来像某种BUG.看那个

let x = childMirror.value == nil ? "Nil" : "Not Nil" //dont compile.let y = { (value:Any?) in   return value == nil ? "Nil" : "Not Nil"}let z = y(childMirror.value) //compile,but doesn't evaluate.

我猜问题是因为Any可以存储一个Optional,但不能包含一个.试试这个:

func getValue(unkNownValue:Any) -> Any {    let value = Mirror(reflecting: unkNownValue)    if value.displayStyle != .Optional || value.children.count != 0 {        return "Not Nil"    } else {        return "Nil"    }}
总结

以上是内存溢出为你收集整理的快速反射导致任何不可能的零值全部内容,希望文章能够帮你解决快速反射导致任何不可能的零值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存