ios - 如果一个变异函数设置它自己等于另一个函数,这意味着什么

标签 ios swift xcode arkit

我正在浏览 Apple 的 Arkit 项目示例。我一直在努力理解代码,因为我还在学习。我看到一个函数将其自身设置为另一个函数,有人可以解释一下这些函数到底在做什么吗?请详细介绍一下。在代码中,“mutating func normalize()”将其自身设置为 self.normalized 为什么会这样。这段代码在做什么。我们能不能简单地调用“func normalized()”,好像我们正在重新创建相同的函数。

mutating func normalize() {

   self = self.normalized()
}


func normalized() -> SCNVector3 {

    if self.length() == 0 {
      return self
  }
    return self / self.length()
}



func length() -> CGFloat {

    return sqrt(self.x * self.x + self.y * self.y)

    }

最佳答案

Swift 中的值类型可以是可变的和不可变的。因此,当您创建 struct( 或任何其他值类型) 并将其分配给变量 (var) 时,它是可变的,您可以在其上调用 normalize() 。这意味着 struct 不会被复制到另一个内存中,并且会在适当的位置更新(就像引用类型一样)。但是当你将它分配给常量 (let) 时——它不能被改变,所以更新这个结构中的值的唯一方法是像 normalized() 方法一样创建一个具有更新值的新值。关于你的问题——normalize() 只是重用逻辑来规范化 normalized() 中的向量。所以这是完全好的解决方案。分配给 self 只允许在可变方法中使用。它基本上是用新结构重写结构的值。

关于ios - 如果一个变异函数设置它自己等于另一个函数,这意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56866121/

相关文章:

ios - 通过命令行将 iOS 应用存档并分发到 App Store

ios - 如何在 Swift3 中使用 View Controller 作为侧边菜单

ios - Firebase Crashlytics for Swift 上未显示的实际原因

ios - 您必须将 UISearchBar 放在 UITableView 中吗?

ios - Storyboard 中自定义类集的本地化不起作用

swift - 在 Storyboard中使用 View Controller 以使教学应用程序不重载内存的最佳方法是什么?

ios - 无法按产品标识从数组中找到SKProduct

json - 声明一个符合协议(protocol)的泛型常量

python - 当我将图像从 Swift 应用上传到服务器时出现错误

ios - 自动更改字体大小以快速适应按钮