将Stephen Poletto SPUserResizableView [Objective C]翻译成Swift 3.0

时间:2017-02-05 20:07:10

标签: objective-c swift translation

使用iOS 10.20& Swift 3.0 想要在我的代码中使用Stephen Poletto编写的这段优秀代码,但在Swift 3.0中真的需要它。

https://github.com/spoletto/SPUserResizableView

今天花了三个小时来通过它,没有信心它会工作,但我必须尝试,必须更容易然后重新发明轮子没有;无论如何,我都希望能在SO中找到一些帮助。

我需要翻译这个......

- (void)resizeUsingTouchLocation:(CGPoint)touchPoint {
// (1) Update the touch point if we're outside the superview.
if (self.preventsPositionOutsideSuperview) {
    CGFloat border = kSPUserResizableViewGlobalInset + kSPUserResizableViewInteractiveBorderSize/2;
    if (touchPoint.x < border) {
        touchPoint.x = border;
    }

我在Swift中得到了它,但我担心与目标C不同,它似乎无法改变参数的值,因为他似乎在这里做了什么?

我得到了..

  func resizeUsingTouchLocation(touchPoint: CGPoint) {
 // (1) Update the touch point if we're outside the superview.
    if (self.preventsPositionOutsideSuperview) {
        let border:CGFloat = CGFloat(kSPUserResizableViewGlobalInset) +    CGFloat(kSPUserResizableViewInteractiveBorderSize) / 2.0;
        if (touchPoint.x < border) {
            touchPoint.x = border
        }

它生成错误,无法更改let属性,在这种情况下touchPoint!还有一些,但这两个特别是正在逐步实现......

1 个答案:

答案 0 :(得分:2)

在Swift中,您无法更改输入参数。在Swift 3之前,您可以在参数名称前添加var,然后您就可以修改一个副本。 Swift 3方法是在函数顶部添加var variableName = variableName

func resizeUsingTouchLocation(touchPoint: CGPoint) {
    var touchPoint = touchPoint

    // (1) Update the touch point if we're outside the superview.
    if self.preventsPositionOutsideSuperview {
        let border = CGFloat(kSPUserResizableViewGlobalInset) + CGFloat(kSPUserResizableViewInteractiveBorderSize) / 2.0
        if touchPoint.x < border {
            touchPoint.x = border
        }

我还删除了()语句中不需要的类型声明if;