我正在尝试创建一个简单的 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/