成员操作符“%”必须至less有一个types为“ViewController”的参数
我试图创build一个简单的Swift 3模板与自定义函数计算百分比使用Xcode应用程序中的后缀一元运算符。 这可能看起来像一个重复的问题,因为在我以前的post中接受的答案已经显示了如何在Playground中做到这一点。 但是我发现自定义函数在Xcode项目中的工作方式不同。
在下面的模板中 ,我'operator' at file scope
(或者至less我相信我做过)声明了'operator' at file scope
。 但是当声明后缀函数时,Xcodebuild议
Operator '%' declared in type 'ViewController' must be 'static'
并提供修复它插入static
。 static
插入Xcode然后build议
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) } }
EDITED模板
这是基于接受的答案的工作模板。 我不明白什么是在文件范围声明操作符。
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) } }
脚注
在接受的答案的基础上,现在可以从同一个项目中的其他文件访问定制操作员函数分组在单个文件中。 在这里看到更多的访问。
我在文件范围声明了“操作员”
不,你没有。 你在UIViewController
定义的范围内定义了它:
postfix operator % class ViewController: UIViewController { // ... static postfix func % (percentage: Int) -> Double { return (Double(percentage) / 100) } }
可以将运算符定义为Swift 3types的静态成员函数,但前提是它们至less需要一个types的参数。
将声明移到文件范围来解决问题:
postfix operator % postfix func % (percentage: Int) -> Double { return (Double(percentage) / 100) } class ViewController: UIViewController { // ... }
其他的select如果你想在Swift 3中使用闭包:
import UIKit typealias Filter = (CIImage) -> CIImage infix operator >>> func >>> (filter1: @escaping Filter, filter2: @escaping Filter) -> Filter{ return { image in filter2( filter1( image)) } } class ViewController: UIViewController { //... }
Eidhof,Chris; 库格勒,弗洛里安; Swierstra,Wouter。 function迅捷:更新为Swift 3(Kindle位置542)。 GbR Florian Kugler&Chris Eidhof。 Kindle版。
- 我已经整合了谷歌加在我的IOS应用程序,但我无法获得当前login的用户的电子邮件ID
- Swift:如何将文本到语音生成的音频转换为.mp3?
- 在将byte 转换为NSData之后,数据会损坏
- (Swift)如何在单元格滑动操作中设置清晰的背景?
- 如何使用Apache Cordova 3.4.0在本地存储文件
- 使用AVMutableComposition iPhone
- CMPedometer queryPedometerDataFromDate返回错误103
- 如何在asynchronous块内为dispatch_group_async调度dispatch_group_wait
- 错误ITMS-9000:无效的捆绑。 xyz.app上的bundle不包含bundle executable