'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

你知道我做错了什么吗?

您必须明确桥接(转换)StringNSString:

(string as NSString).characterAtIndex(0)

虽然 Swift 的 StringNSString 可以互换,但在某种意义上,您可以将 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