Ami*_*mit 18 iphone xcode swift2 swift3 xcode8
我正在尝试将Swift 2.3迁移到3.0并且转换后面临此问题.有什么建议我做错了.
override func setValue(_ value: AnyObject?, forKey key: String) {
let uppercasedFirstCharacter = String(key.characters.first!).uppercased()
let range = key.startIndex...key.index(key.startIndex, offsetBy: 0)
let selectorString = key.replacingCharacters(in: range, with: uppercasedFirstCharacter)
let selector = NSSelectorFromString("set\(selectorString):")
let responds = self.responds(to: selector)
if !responds {
return
}
Run Code Online (Sandbox Code Playgroud)
错误:
let selectorString = key.replacingCharacters(in:range,with:uppercasedFirstCharacter)
Run Code Online (Sandbox Code Playgroud)Cannot convert value of type 'ClosedRange<Index>' (aka 'ClosedRange<String.CharacterView.Index>') to expected argument type 'Range<Index>' (aka 'Range<String.CharacterView.Index>')
override func setValue(value: AnyObject?, forKey key: String) {
let uppercasedFirstCharacter = String(key.characters.first!).uppercaseString
let range = key.startIndex...key.startIndex.advancedBy(0)
let selectorString = key.stringByReplacingCharactersInRange(range, withString: uppercasedFirstCharacter)
let selector = NSSelectorFromString("set\(selectorString):")
let responds = self.respondsToSelector(selector)
if !responds {
return
}
Run Code Online (Sandbox Code Playgroud)
dfr*_*fri 17
您可以使用..<
而不是...
for range
来Range<Index>
代替ClosedRange<Index>
,在这种情况下,调用stringByReplacingCharactersInRange(...)
不会产生错误(注意offsetBy
增加1
).
let range = key.startIndex..<key.index(key.startIndex, offsetBy: 1)
// range is now type Range<Index>
Run Code Online (Sandbox Code Playgroud)
现在,我可能错了,但似乎你只是希望成为第一个字符大写selectorString
的版本key
.您的范围解决方案的另一种方法是,您可以使用String
扩展解决方案,如下所示:
extension String {
var firstCharacterUppercased: String {
guard case let c = self.characters,
let c1 = c.first else { return self }
return String(c1).uppercased() + String(c.dropFirst())
}
}
/* example usage */
let key = "fooBar"
let selectorString = key.firstCharacterUppercased
print(selectorString) // FooBar
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7297 次 |
最近记录: |