我使用以下UITextFieldDelegate方法:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool {
并在尝试访问第一个字符时收到上面的错误消息:
let firstChar = string.characterAtIndex(0)
我不知道这段代码有什么问题,因为NSString类引用列出了函数:
func characterAtIndex(_ index: Int) -> unichar
你知道我做错了吗?
答案 0 :(得分:5)
您必须明确桥接(强制转换)String
到NSString
:
(string as NSString).characterAtIndex(0)
答案 1 :(得分:2)
虽然Swift的String
和NSString
是可以互换的,但您可以将String
传递给期待NSString
的API,反之亦然,这两者是不一样。通常情况下,如果没有演员,则无法在NSString
上调用String
方法。
从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