我刚刚开始在 Xcode 中从 Obj-C 转向 Swift。
是否无法再使用#define
中的宏?我知道我可以使用 let
来定义常量,但我习惯于在我的大多数程序顶部使用这组宏,例如:
#define frameMinX CGRectGetMinX(self.frame)
#define frameMinY CGRectGetMinY(self.frame)
#define frameMidX CGRectGetMidX(self.frame)
#define frameMidY CGRectGetMidY(self.frame)
#define frameMaxX CGRectGetMaxX(self.frame)
#define frameMaxY CGRectGetMaxY(self.frame)
#define frameMin CGPointMake(frameMinX, frameMinY)
#define frameMid CGPointMake(frameMidX, frameMidY)
#define frameMax CGPointMake(frameMaxX, frameMaxY)
最佳答案
你不能在 Swift 中使用 #define
,但是这些似乎都是在 UIView
的框架上计算的,所以你可以扩展 UIView
将它们添加为计算属性:
extension UIView {
var frameMinX: CGFloat { return CGRectGetMinX(self.frame) }
var frameMinY: CGFloat { return CGRectGetMinY(self.frame) }
var frameMidX: CGFloat { return CGRectGetMidX(self.frame) }
var frameMidY: CGFloat { return CGRectGetMidY(self.frame) }
var frameMaxX: CGFloat { return CGRectGetMaxX(self.frame) }
var frameMaxY: CGFloat { return CGRectGetMaxY(self.frame) }
var frameMin: CGPoint { return CGPointMake(frameMinX, frameMinY) }
var frameMid: CGPoint { return CGPointMake(frameMidX, frameMidY) }
var frameMax: CGPoint { return CGPointMake(frameMaxX, frameMaxY) }
}
使用示例:
在 UIView
的任何子类中,您可以像使用宏一样使用这些属性:
class CustomView: UIView {
func demoProperties() {
print(frameMinX)
print(frameMax)
}
}
let view = CustomView(frame: CGRect(x: 50, y: 100, width: 200, height: 300))
view.demoProperties()
输出:
50.0 (250.0, 400.0)
关于objective-c - 使用 Objective-C 宏访问 Swift 中的 UIView 帧测量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38286243/