ios - 成员运算符 '%' 必须至少有一个 'ViewController’ 类型的参数

标签 ios swift xcode swift3

我正在尝试创建一个简单的 Swift 3 模板,其中包含一个自定义函数,用于在 Xcode 应用程序中使用后缀一元运算符计算百分比。这似乎是一个重复的问题,因为 accepted answer在我之前的帖子中已经展示了如何在 Playground 中执行此操作。但后来我发现自定义函数在 Xcode 项目中的工作方式不同。

下面的模板中,我在文件范围内声明了'operator'(或者至少我相信我这样做了)。但是当声明后缀函数时,Xcode 会提示

    Operator '%' declared in type 'ViewController' must be 'static' 

并提供了一个修复程序来插入static。使用 static 插入 Xcode 然后建议

    Member operator '%' must have at least one argument of type 'ViewController’.

谁能解释为什么 Xcode 项目中的 % 函数需要是 static 以及同一行上下文中最后一条错误消息的含义 (见下文)?谢谢

模板草案

import UIKit

postfix operator %

class ViewController: UIViewController {

var percentage = Double()

override func viewDidLoad() {
    super.viewDidLoad()

    percentage = 25%
    print(percentage)
    }

static postfix func % (percentage: Int) -> Double {
    return (Double(percentage) / 100)
    }
}

编辑模板

这是基于已接受答案的工作模板。我不明白在文件范围内声明运算符是什么意思。

import UIKit


postfix operator %

postfix func % (percentage: Int) -> Double {
return (Double(percentage) / 100)
}


class ViewController: UIViewController {

var percentage = Double()

override func viewDidLoad() {
    super.viewDidLoad()

    percentage = 25%
    print(percentage)
    }
}

脚注

基于已接受的答案,现在可以从同一项目中的其他文件访问分组在单个文件中的自定义运算符函数。要查看更多信息,请访问 here .

最佳答案

I declared the ’operator' at file scope

不,你没有。您在范围内定义了它 UIViewController 定义:

postfix operator %

class ViewController: UIViewController {

    // ...

    static postfix func % (percentage: Int) -> Double {
        return (Double(percentage) / 100)
    }
}

可以将运算符定义为 Swift 3 中类型的静态成员函数, 但前提是它们至少接受一个该类型的参数。

将声明移动到文件范围以解决问题:

postfix operator %

postfix func % (percentage: Int) -> Double {
    return (Double(percentage) / 100)
}

class ViewController: UIViewController {

    // ...

}

关于ios - 成员运算符 '%' 必须至少有一个 'ViewController’ 类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40932230/

相关文章:

ios - 如何使用 AWS DynamoDBQueryExpression 获取最近添加的 10 个项目?

iphone - [NSManagedObject isEqualToString :]: unrecognized selector sent to instance 0x454a590'

iOS:核心图像和多线程应用程序

ios - iOS mask 图层和添加子图层之间的区别

ios - 为什么使用 Alamofire 请求失败?

swift - 为使用 URLSession 和 RxSwift 的函数编写单元测试

ios - 当 JSON 调用时间过长时允许用户取消 MBProgressHUD

iphone - 如何支持多个 iOS 版本?

ios - 从 [NSObject removeObserver :forKeyPath:]? 捕获异常是否安全

ios - Clout 工具包基础知识 - 应用程序与云中保存了什么? (特别是结构实例)