swift4でrxswiftを使用してUITextFieldにmaxlengthを設定する


この記事を参考に、UITextFieldのmaxlengthを設定していたのですが、maxlengthって割と色々なところで設定するんですよね……
なので、もうちょっと色々なUITextFieldから使えるようにしてみました。

実装!

maxlength.swift
func setMaxLength(textField: UITextField, limit: Int) -> (String?) -> Void {
    return { txt in
        guard let txt = txt else {
            return
        }

        if txt.count >= limit {
            let start = txt.startIndex
            let end = txt.index(start, offsetBy: limit)
            textField.text = txt.substring(with: start..<end)
        }
    }
}

hogeTextField.rx.text.subscribe(
    onNext: setMaxLength(textField: hogeTextField, limit: 10)
)

fugaTextField.rx.text.subscribe(
    onNext: setMaxLength(textField: fugaTextField, limit: 10)
)

textFieldを引数で渡さないようにしたい・・・が、ぐぬぬ