'String' 类型的值没有成员 'characterAtIndex'
Value of type 'String' has no member 'characterAtIndex'
我正在使用以下 UITextFieldDelegate 方法:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool {
并在尝试访问第一个字符时得到上面的错误消息:
let firstChar = string.characterAtIndex(0)
我不知道这段代码有什么问题,因为 NSString class 参考列出了函数:
func characterAtIndex(_ index: Int) -> unichar
你知道我做错了什么吗?
您必须明确桥接(转换)String
到 NSString
:
(string as NSString).characterAtIndex(0)
虽然 Swift 的 String
和 NSString
可以互换,但在某种意义上,您可以将 String
传递给需要 NSString
的 API,反之亦然, 两者并不相同。通常,如果不进行强制转换,就无法在 String
上调用 NSString
方法。
从 String
获取初始字符的方式不同 - 而不是使用 characterAtIndex(0)
你调用
let str = "Hello"
let initialChar = str[str.startIndex] // will throw when str is empty
或
let initialChar = str.characters.first // produces an optional value
我正在使用以下 UITextFieldDelegate 方法:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool {
并在尝试访问第一个字符时得到上面的错误消息:
let firstChar = string.characterAtIndex(0)
我不知道这段代码有什么问题,因为 NSString class 参考列出了函数:
func characterAtIndex(_ index: Int) -> unichar
你知道我做错了什么吗?
您必须明确桥接(转换)String
到 NSString
:
(string as NSString).characterAtIndex(0)
虽然 Swift 的 String
和 NSString
可以互换,但在某种意义上,您可以将 String
传递给需要 NSString
的 API,反之亦然, 两者并不相同。通常,如果不进行强制转换,就无法在 String
上调用 NSString
方法。
从 String
获取初始字符的方式不同 - 而不是使用 characterAtIndex(0)
你调用
let str = "Hello"
let initialChar = str[str.startIndex] // will throw when str is empty
或
let initialChar = str.characters.first // produces an optional value