gpt4 book ai didi

ios - 为什么我在使用它之前不必先实例化 NSCharacterSet 对象?

转载 作者:可可西里 更新时间:2023-11-01 00:00:02 28 4
gpt4 key购买 nike

我正在学习有关委托(delegate)和协议(protocol)的教程,同时使用 UITextField 对象。在本教程中,我注意到我不必先通过键入

来实例化 NSCharacterSet 对象
let letterCharacters = NSCharacterSet()

本教程的代码通过直接访问 NSCharacterSet 的字母变量来工作,这令人惊叹。我假设对象在使用或引用它们之前总是需要先实例化。这是有效的完整功能:

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 对象?

最佳答案

来自Apple documentation :

class var letters: CharacterSet

A character set containing the characters in Unicode General Category L* & M*.

这里的关键部分是该定义的 class 部分。如果它是一个类变量,则不需要使用 NSCharacterSet() 实例化对象。

变量类型快速入门。

  • 类变量可以简单地通过使用类名CharacterSet.letters调用变量来访问,例如
  • 一个实例变量需要先实例化它的类才能被访问,characterSet.inverted 就是一个例子

通常,类变量永远不会改变,因此不需要维护状态。实例变量可能会。

关于ios - 为什么我在使用它之前不必先实例化 NSCharacterSet 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46962385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com