【问题标题】:How do you cast NSValue pointerValue() to UIView in Swift?如何在 Swift 中将 NSValue pointerValue() 转换为 UIView?
【发布时间】:2014-10-24 16:58:21
【问题描述】:

我将 UIView 包装在 NSValue 中,这样我就可以将其用作字典中的键。

let viewValue = NSValue(nonretainedObject: myView)

我需要知道如何在使用时将 UIView 取出并正确投射:

viewValue.pointerValue()

它返回一个 UnsafeMutablePointer,我需要将它转换为 UIView

【问题讨论】:

    标签: ios swift uikit


    【解决方案1】:

    如果您将其存储为 nonretainedObject 值,您应该以相同的方式获取它。

    let viewValue = NSValue(nonretainedObject: myView)
    viewValue.nonretainedObjectValue
    

    另一个会这样配对:

    let viewValue = NSValue(pointer: myView)
    viewValue.pointerValue()
    

    【讨论】:

    • 感谢@Ian MacDonald!
    • nonretainedObjectValue 是属性而不是函数,所以应该是viewValue.nonretainedObjectValue。另请注意,它作为可选的UIView? 返回,因此最好将其包装在可选的绑定语句中:if let view = viewValue.nonretainedObjectValue { ... }
    • @MikeS @Ian MacDonald var view:UIView = UIView() let viewValue = NSValue(nonretainedObject: view) var dict = [viewValue:view] var view2:UIView = dict[NSValue(nonretainedObject: view)]! 工作正常,为什么我们需要这些东西,请告诉我。
    • @codester 如果viewValue 只是用作字典键,那么我想不出为什么你需要将UIView 拉回其中的原因。也许@bstahlhood 也在其他地方使用viewValue...
    • 谢谢,迈克。我猜我打字很快,并没有注意到。我更新了访问器。不过,我将把有条件的检查留给读者。我只是在回答这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    相关资源
    最近更新 更多