Вот рабочий пример для swift 4
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
// Allow Backspace
if string.count == 0 {
return true
}
// Allow Only Valid Decimal Numbers
if let textFieldText = textField.text {
let finalText = (textFieldText as NSString).replacingCharacters(in: range, with: string)
if Double(finalText) != nil {
return true
}
}
return false
}
У меня была такая же проблема с декоратором сельдерея @task.
Вы также можете исправить это в вашем случае, добавив правильную сигнатуру функции в ваш первый файл, например:
.. autoclass:: Bus
:members:
.. automethod:: open(self)
.. automethod:: some_other_method(self, param1, param2)
Он все равно будет автоматически документировать элементы, не являющиеся декораторами.
Это упомянуто в документации sphinx на http://www.sphinx-doc.org/en/master/ext/autodoc.html#directive-automodule - поиск «Это полезно если подпись метода скрыта декоратором. "
В моем случае мне пришлось использовать автофункцию, чтобы указать сигнатуру моих задач с сельдереем в модуле tasks.py приложения django:
.. automodule:: django_app.tasks
:members:
:undoc-members:
:show-inheritance:
.. autofunction:: funct1(user_id)
.. autofunction:: func2(iterations)
Если вы особенно непреклонны в том, чтобы не добавлять еще одну зависимость, вот фрагмент кода, который работает с обычным инспектором, внедряя его в строку документации. Это довольно хакерский и не очень рекомендуется, если нет веских причин не добавлять еще один модуль, но здесь это так.
# inject the wrapped functions signature at the top of a docstring
args, varargs, varkw, defaults = inspect.getargspec(method)
defaults = () if defaults is None else defaults
defaults = ["\"{}\"".format(a) if type(a) == str else a for a in defaults]
l = ["{}={}".format(arg, defaults[(idx+1)*-1]) if len(defaults)-1 >= idx else arg for idx, arg in enumerate(reversed(list(args)))]
if varargs: allargs.append('*' + varargs)
if varkw: allargs.append('**' + varkw)
doc = "{}({})\n{}".format(method.__name__, ', '.join(reversed(l)), method.__doc__)
wrapper.__doc__ = doc