错误1:当我尝试stringValue从元数据显示以上错误时Swift3:
let myMetadata: AVMetadataMachineReadableCodeObject = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
// take out the system and check-digits
let myBarcode = myMetadata.stringValue[1...11] //error
Run Code Online (Sandbox Code Playgroud)
错误2:
在String的扩展中,我将这些写入get right(x)和left(x)function来获取子字符串:
extension String {
// length of string
var length: Int {
return self.characters.count
}
// right(x) and left(x) function to get substring
func right(_ i: Int) -> String?
{
return self[self.length-i ... self.length-1 ] //error
}
func left(_ i: Int) -> String?
{
return self[0 ... i-1] //error
}
}
Run Code Online (Sandbox Code Playgroud)
vad*_*ian 29
将此扩展名用于可数的闭区范围[0...4]下标
extension String {
subscript (r: CountableClosedRange<Int>) -> String {
get {
let startIndex = self.index(self.startIndex, offsetBy: r.lowerBound)
let endIndex = self.index(startIndex, offsetBy: r.upperBound - r.lowerBound)
return self[startIndex...endIndex]
}
}
}
Run Code Online (Sandbox Code Playgroud)
或更安全的版本,检查边界和返回nil而不是超出范围的异常:
extension String {
subscript (r: CountableClosedRange<Int>) -> String? {
get {
guard r.lowerBound >= 0, let startIndex = self.index(self.startIndex, offsetBy: r.lowerBound, limitedBy: self.endIndex),
let endIndex = self.index(startIndex, offsetBy: r.upperBound - r.lowerBound, limitedBy: self.endIndex) else { return nil }
return self[startIndex...endIndex]
}
}
}
Run Code Online (Sandbox Code Playgroud)
Swift 4更改:您需要从结果中创建一个新字符串
return String(self[startIndex...endIndex])
Run Code Online (Sandbox Code Playgroud)