在Swift中,stringByReplacingCharactersInRange是如何工作的?

3

我有一段Objective-C代码:

[textField.text stringByReplacingCharactersInRange:range withString:string];

尝试转换为Swift,像这样:

textField.text.stringByReplacingCharactersInRange(range, withString: string)

但编译器显示: Int 与 'String.index' 不相同

我该如何修改表达式?

我正在使用 UITextFieldDelegate 方法中的 Objective-C / Swift 表达式:

func textField(textField: UITextField!,
    shouldChangeCharactersInRange range: NSRange,
    replacementString string: String!) -> Bool {

enter image description here


在这两种情况下,你是如何定义“range”的? - Undo
两者都具有NSRange类型。 - János
我得到了一个与另一个线程不同的错误消息,它与范围有关,而不是字符串。 - János
2
另一个线程是关于同样的问题(实现shouldChangeCharactersInRange)。您尝试过这个解决方案(使用bridgeToObjectiveC)吗?那看起来很好用。在Swift编译器的测试版之间,错误消息可能会发生变化。 - Martin R
1个回答

1
使用 bridgeToObjectiveC()
textField.text.bridgeToObjectiveC().stringByReplacingCharactersInRange(range, withString: string)

它将更加清晰明了。

var st = "abc"
str.bridgeToObjectiveC().stringByReplacingCharactersInRange(NSMakeRange(2,1), withString:"r")

可以对 NSString 进行显式转换,而不需要使用 bridgeToObjectiveC

var st = "abc" as NSString
let abc = st.stringByReplacingCharactersInRange(NSMakeRange(2, 3), withString: "abc")

我使用NSMakeRange时遇到了相同的错误。 - János
你有导入Foundation吗? - codester
我已经测试过了,没有导入Foundation也可以正常工作。 - codester
我也添加了“import Foundation”,但仍然出现错误。 - János
bridgeToObjectiveC() helps - János
我如何在不将字符串转换为NSString的情况下完成相同的操作? - Noundla Sandeep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接