在使用 UITextField 对象时,我正在学习有关委托和协议的教程。在教程中,我注意到我不必先通过键入实例化 NSCharacterSet 对象
let letterCharacters = NSCharacterSet()
本教程的代码通过直接访问 NSCharacterSet 的 letters 变量来工作,这令人兴奋。我假设对象总是需要在使用它们或引用它们之前先被实例化。这是有效的完整功能:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let existingTextHasDecimalSeperator = textField.text?.range(of: ".")
let replacementTextHasDecimalSeperator = string.range(of: ".")
let letterCharacters = NSCharacterSet.letters
let foundCharacter = string.rangeOfCharacter(from: letterCharacters)
if existingTextHasDecimalSeperator != nil && replacementTextHasDecimalSeperator != nil {
return false
} else if foundCharacter != nil {
return false
} else {
return true
}
}
为什么允许我直接使用 NSCharacterSet.letters 而不是先创建 NSCharacterSet 对象?