代码之家  ›  专栏  ›  技术社区  ›  Michael asterite

静态Objective-C表达式的Swift等价

  •  2
  • Michael asterite  · 技术社区  · 11 年前

    Swift等价于以下表达式:

    static CGRect MYScaleRect(CGRect rect, CGFloat scale)
    {
        return CGRectMake(rect.origin.x * scale, rect.origin.y * scale, rect.size.width * scale, rect.size.height * scale);
    }
    
    3 回复  |  直到 7 年前
        1
  •  5
  •   Nikolai Ruhe    11 年前

    你的代码是纯C;不涉及Objective-C。而且,严格来说,它不是一个表达式。

    这是一个函数的定义,它没有发出符号(这就是 static 在本文中确实如此)。因此,该函数仅在当前编译单元(定义它的.c或.m文件)中可见。该函数未绑定到某个类。

    语义Swift等价物将是一个简单的Swift函数 private 访问修饰符。

        2
  •  2
  •   Tomasz Bąk    11 年前

    对于这种类型的函数(实用程序),我建议使用结构扩展,但有三种方法。

    自由功能: (相当于问题中的函数)

    private func MYScaleRect(rect: CGRect , scale: CGFloat ) -> CGRect {
        return CGRectMake(rect.origin.x * scale, rect.origin.y * scale, rect.size.width * scale, rect.size.height * scale)
    }
    

    结构扩展:

    private extension CGRect {
        static func MYScaleRect(rect: CGRect , scale: CGFloat ) -> CGRect {
            return CGRectMake(rect.origin.x * scale, rect.origin.y * scale, rect.size.width * scale, rect.size.height * scale)
        }
    }
    

    类方法:

    private class func MYScaleRect(rect: CGRect , scale: CGFloat ) -> CGRect {
        return CGRectMake(rect.origin.x * scale, rect.origin.y * scale, rect.size.width * scale, rect.size.height * scale)
    }
    

    对于这种类型的函数(实用程序),我建议使用扩展。

        3
  •  0
  •   Jérôme    11 年前

    如果您的方法属于类,在Swift中可以使用 type method :

    class func MYScaleRect(rect: CGRect , scale: CGFloat )-> CGRect {}
    

    如上所述,实例方法是在 特定类型的实例。您还可以定义以下方法 调用类型本身。这些类型的方法称为类型 方法。通过编写关键字来指示类的类型方法 方法func关键字之前的类,以及的类型方法 结构和枚举,方法是在 methods func关键字。