我开始学习Swift,并希望找到它作为Objective C的绝佳替代品。
我正在尝试将Objective C类转换为Swift,但我找不到将以下方法转换为Swift的最佳方法。
@implementation VersionReader
- (NSString *)readVersionFromString:(NSString *)string {
if (string.length == 0) {
return nil;
}
unichar firstChar = [string characterAtIndex:0];
if (firstChar < '0' || firstChar > '9') {
return nil;
}
NSUInteger length = string.length;
for (NSUInteger i = 0; i < length; ++i) {
if ([string characterAtIndex:i] == ' ') {
return [string substringToIndex:i];
}
}
return string;
}
@end
到目前为止,我的Swift代码如下所示:
import Cocoa
class VersionReader {
func readVersionFromString(string: String) -> String? {
if (string.isEmpty) {
return nil
}
var firstChar = string.characterAtIndex[0]
if (firstChar < 48 || firstChar > 57) {
return nil
}
var length = string.utf16Count
for (var i = 0; i < length; ++i) {
if (string.characterAtIndex(i) == 32) {
return string.substringToIndex(i)
}
}
return string
}
}
汤姆,我在两行上得到了同样的错误:
'String' does not have a member named 'characterAtIndex'
什么是在Swift中使这个工作的替代方案?提前谢谢。
答案 0 :(得分:1)
可能的Swift解决方案:
func readVersionFromString(string: String) -> String? {
if string.isEmpty {
return nil
}
let firstChar = string[string.startIndex]
if !find("0123456789", firstChar) {
return nil
} else if let pos = find(string, " ") {
return string.substringToIndex(pos)
} else {
return string
}
}
答案 1 :(得分:0)
Swift的String
类型没有characterAtIndex
方法。您可以将其投射到NSString
并按如下所示使用它:
var firstChar = (string as NSString).characterAtIndex(0)
或
var firstChar = string.bridgeToObjectiveC().characterAtIndex(0)
请注意,characterAtIndex
方法会返回unichar
,这似乎就是您想要的。但获得Swift Character
的正确方法将由FreeAsInBeer在他的回答中提出:Array(string)[0]
答案 2 :(得分:-1)
Swift没有characterAtIndex
选择器。相反,您需要使用Array(string)[0]
。