Я пытаюсь создать простой шаблон Swift 3 с пользовательской функцией для вычисления процента с помощью постфиксарного унарного оператора в приложении Xcode. Это может показаться дублирующимся вопросом, потому что accepted answer в моем предыдущем сообщении уже показывает, как это сделать на Playground. Но с тех пор я обнаружил, что пользовательская функция не работает одинаково в проекте Xcode.Member operator '%' должен иметь хотя бы один аргумент типа 'ViewController'
В шаблоне ниже, я объявил ’operator' at file scope
(или, по крайней мере, я считаю, что сделал). Но когда функция постфикса объявлена, Xcode советует, что
Operator '%' declared in type 'ViewController' must be 'static'
и предлагает исправить-то вставить static
. С static
вставлено Xcode затем советует
Member operator '%' must have at least one argument of type 'ViewController’.
Может кто-нибудь объяснить, почему функция %
должна быть static
в проекте Xcode и что означает последнее сообщение об ошибке в контексте одной и той же линии (см ниже)? Благодаря
Проект шаблона
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)
}
}
СНОСКА
Опираясь на принятый ответ, пользовательские функции оператора, сгруппированные в одном файле, теперь могут быть доступны из других файлов в одном проекте. Чтобы увидеть больше, посетите here.
Я также попытался переместить функцию в область действия файла, как вы предложили, где она больше не является статической. На этот раз я его протестировал, и это подтверждает ваш ответ. Благодарю. – Greg
, вы можете быть заинтересованы в решении, используя статические функции postfix. Несмотря на это, я многому научился с вашего вклада. Благодарю. См. Окончательное изменение http://stackoverflow.com/questions/40941827/how-to-access-a-custom-function-from-any-file-in-the-same-swift-project – Greg