gpt4 book ai didi

Objective-C 转换为 Swift : Bound Macros?

转载 作者:行者123 更新时间:2023-11-28 13:02:24 24 4
gpt4 key购买 nike

我正在浏览 this tutorial关于如何制作双 slider ,同时还学习如何从 ObjC 转换为 Swift(我真的只知道 Swift,但我正在学习一些关于 ObjC 的知识),一切进展顺利,但我一直停留在这一点上试图翻译这个部分 swift 。一方面我不知道 BOUND 宏是什么,它不在任何指南中,例如 this one ,另一个我不知道如何将它翻译成 Swift。

这是 Objective-C 中的代码:

#define BOUND(VALUE, UPPER, LOWER)  MIN(MAX(VALUE, LOWER), UPPER)

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{
CGPoint touchPoint = [touch locationInView:self];

// 1. determine by how much the user has dragged
float delta = touchPoint.x - _previousTouchPoint.x;
float valueDelta = (_maximumValue - _minimumValue) * delta / _useableTrackLength;

_previousTouchPoint = touchPoint;

// 2. update the values
if (_lowerKnobLayer.highlighted)
{
_lowerValue += valueDelta;
_lowerValue = BOUND(_lowerValue, _upperValue, _minimumValue);
}
if (_upperKnobLayer.highlighted)
{
_upperValue += valueDelta;
_upperValue = BOUND(_upperValue, _maximumValue, _lowerValue);
}

// 3. Update the UI state
[CATransaction begin];
[CATransaction setDisableActions:YES] ;

[self setLayerFrames];

[CATransaction commit];

return YES;
}

这是我的 swift 代码:

override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
var touchPoint: CGPoint = touch.locationInView(self)

//Determine how much the user has dragged
var delta: CGFloat = touchPoint.x - previousTouchPoint.x
var valueDelta: CGFloat = (maximumValue - minimumValue) * delta / usableTrackLength

previousTouchPoint = touchPoint

//Update the values
if lowerKnobLayer.highlighted {
lowerValue += valueDelta
lowerValue = BOUND(upperValue, maximumValue, lowerValue) //this won't compile, there is no BOUND identifier
}
if upperKnobLayer.highlighted {
upperValue += valueDelta
upperValue = BOUND(_upperValue, _maximumValue, _lowerValue) //This doesn't work
}

//Update the UI State
CATransaction.begin()
CATransaction.setDisableActions(true)
self.setLayerFrames()
CATransaction.commit()
}

什么是 BOUND 宏?我如何在 Swift 中做到这一点?

根据以下答案进行编辑:

lowerValue = min(max(lowerValue, upperValue), minimumValue)

upperValue = min(max(upperValue, maximumValue), lowerValue)

最佳答案

BOUND 是代码中自声明的宏,它执行 MIN(MAX(VALUE, LOWER), UPPER)

其中 MINMAX 只是 C 宏,用于获取传入值之间的最小值和最大值。它获取最大值和值之间的最小值较低和较高(我猜有点困惑)。

Swift 定义了这些宏: Swift equivalent for MIN and MAX macros

创建一个方法来执行 BOUND 正在做的事情并调用它,上面的帖子中的示例对此进行了很好的解释。

关于Objective-C 转换为 Swift : Bound Macros?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33571540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com