从对象引用值类型以便以后进行突变的安全方法

时间:2018-06-07 05:29:34

标签: swift

当您想要外部值类型的延迟变异时,我正在寻找管理传递给对象的外部值类型的最佳实践。其核心目标是提供友好/传统的界面,同时更具惯用性。

我的当前代码使用UnsafeMutablePointer。看起来像这样:

struct MutableData {
    var variable: Double = 1
}

struct Object
{
    var variablePtr: UnsafeMutablePointer<Double>? = nil

    mutating func add(data: UnsafeMutablePointer<Double>) {
      self.variablePtr = data
    }

    mutating func mutateLater() {
        self.variablePtr?.pointee = 10
    }
}

var mutableState = MutableData()
var compute = Object()

compute.add(data: &mutableState.variable)
compute.mutateLater()

虽然这有效,但我担心指针所指向的外部结构的生命周期内缺乏保证。

有办法:

  • 保证结构生命周期,而我指向它?
  • 通过指针内省检查值类型是否存在
  • 另一种重写方法,以便以后使用@escaping闭包 检索,而不需要古怪的外部API?
  • 其他惯用的方式来写这个获得正确的行为和安全吗?

0 个答案:

没有答案