gpt4 book ai didi

iphone - Swift3.0 无法将类型 'ClosedRange' 的值转换为类型 'Range'

转载 作者:行者123 更新时间:2023-12-03 18:20:54 25 4
gpt4 key购买 nike

我正在尝试将 Swift 2.3 迁移到 3.0,并在转换后遇到此问题。任何建议我做错了什么。

swift 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
}

Error:

let selectorString = key.replacingCharacters(in: range, with: uppercasedFirstCharacter)

Cannot convert value of type 'ClosedRange<Index>' (aka 'ClosedRange<String.CharacterView.Index>') to expected argument type 'Range<Index>' (aka 'Range<String.CharacterView.Index>')

原始代码:Swift 2.3

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
}

最佳答案

您可以使用..<而不是...对于 range类型为Range<Index>而不是ClosedRange<Index> ,在这种情况下调用 stringByReplacingCharactersInRange(...)不会产生错误(注意 offsetBy 增加 1 )。

let range = key.startIndex..<key.index(key.startIndex, offsetBy: 1)
// range is now type Range<Index>

现在,我可能是错的,但看起来你只是想要 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

关于iphone - Swift3.0 无法将类型 'ClosedRange<Index>' 的值转换为类型 'Range<Index>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com