在 Objective C 中,当我尝试编写相同的代码时,该行height = view.frame.height
抛出错误。谁能告诉我这两行代码的区别(如果有的话)。
CGGeometry.h 定义了几种类型,其中包括 C struct CGRect
。这个结构有两个成员:原点和大小。
这就是您可以使用点符号在 C(和 Objective-C)中访问的所有内容。C 和 Objective-C 都没有为结构提供扩展。
Swift 将类型作为 Swift 结构导入。不同之处在于 Swift确实允许对结构进行扩展。因此它公开了几个免费的 C 函数作为扩展:
CGRectGetMinX() — CGRect.minX
CGRectGetMidX() — CGRect.midX
CGRectGetMaxX() — CGRect.maxX
CGRectGetWidth() — CGRect.width
[... same for y]
这些 C 函数自古就有——它们只是生活在 CoreGraphics 的一个尘土飞扬的角落。
它们非常有用,但您必须了解它们的语义(与标准访问器略有不同):它们标准化了维度。
这意味着他们将具有负宽度或高度的矩形转换为覆盖具有正大小和偏移原点的相同区域的矩形。
let rect = CGRect(x: 0, y: 0, width: 10, height: -10)
assert(rect.width == rect.size.width) // OK
assert(rect.height == rect.size.height) // boom