Ios 为什么我没有';在使用NSCharacterSet对象之前,是否不必先实例化它?
我正在学习使用UITextField对象时有关委托和协议的教程。在教程中,我注意到我不必首先通过键入来实例化NSCharacterSet对象Ios 为什么我没有';在使用NSCharacterSet对象之前,是否不必先实例化它?,ios,swift,nscharacterset,Ios,Swift,Nscharacterset,我正在学习使用UITextField对象时有关委托和协议的教程。在教程中,我注意到我不必首先通过键入来实例化NSCharacterSet对象 let letterCharacters = NSCharacterSet() 本教程的代码通过直接获取NSCharacterSet的letters变量来工作,这非常令人兴奋。我假设在使用或引用对象之前,总是需要先实例化对象。以下是有效的完整功能: func textField(_ textField: UITextField, shouldChange
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对象?来自:
包含Unicode常规类别中的字符的字符集
L*&M*
这里的关键部分是该定义的类。如果是类变量,则不需要使用NSCharacterSet()
实例化对象
关于变量类型的快速入门
- 只需使用类名
CharacterSet调用变量即可访问类变量。例如,字母
- 实例变量需要先实例化它的类,然后才能访问它,
就是一个例子characterSet.inversed
通常,类变量永远不会更改,因此不需要维护状态。实例变量可能会出现。如果仔细查看文档(我更喜欢使用跳转到定义而不是apple文档),您会发现类NSCharacterSet确实提供了类变量 您可以将其与带有案例的枚举进行比较,但这有点不同,因为您得到了实际值,并且。。。只不过不是案例。静态变量和类变量的区别在于类变量可以被重写,而静态变量不能 但要回答您的问题:您可以直接访问这些变量,因为它们是静态的 如果您打开游乐场,您可以为自己创建一个很好的示例:
class Car {
// This might be bad example, but you will see on next lines...
class var brand: String { return "Volkswagen" }
/// Because Volkswagen... :D
class func emitSmog() {
// Do wonderful things to earth and basically product rainbows
}
}
// You don't need to create the Car instance
print(Car.brand)
// Again, this function is static, so you don't need to construct anything...
Car.emitSmog()
请参阅苹果的文档:
请参阅类型方法。您是否查阅了文档?是一个类属性,返回
CharacterSet
@MartinR的一个实例,好的!类属性就是这样做的吗?为了理解类属性,我读了无数的博客和文档,但我想从你的角度来理解它。哦,好的!类似于UIColor.green@CodeBender@Q.A.Neuro.Tech是的,因为在这种情况下,绿色永远不会改变。如果你用“大众汽车”代替“福特”,用emitSmog()代替makeNoise(),这将是有史以来最好的答案:)@CodeBender一切皆有可能:D:D
class Car {
// This might be bad example, but you will see on next lines...
class var brand: String { return "Volkswagen" }
/// Because Volkswagen... :D
class func emitSmog() {
// Do wonderful things to earth and basically product rainbows
}
}
// You don't need to create the Car instance
print(Car.brand)
// Again, this function is static, so you don't need to construct anything...
Car.emitSmog()