필자가 작성하는 당시에는 확장 기능이 Swift 4.2 와 완벽하게 호환되지 않으므로 여기에 내가 생각할 수있는 모든 요구를 충족시키는 확장 기능이 있습니다.
extension String {
func substring(from: Int?, to: Int?) -> String {
if let start = from {
guard start < self.count else {
return ""
}
}
if let end = to {
guard end >= 0 else {
return ""
}
}
if let start = from, let end = to {
guard end - start >= 0 else {
return ""
}
}
let startIndex: String.Index
if let start = from, start >= 0 {
startIndex = self.index(self.startIndex, offsetBy: start)
} else {
startIndex = self.startIndex
}
let endIndex: String.Index
if let end = to, end >= 0, end < self.count {
endIndex = self.index(self.startIndex, offsetBy: end + 1)
} else {
endIndex = self.endIndex
}
return String(self[startIndex ..< endIndex])
}
func substring(from: Int) -> String {
return self.substring(from: from, to: nil)
}
func substring(to: Int) -> String {
return self.substring(from: nil, to: to)
}
func substring(from: Int?, length: Int) -> String {
guard length > 0 else {
return ""
}
let end: Int
if let start = from, start > 0 {
end = start + length - 1
} else {
end = length - 1
}
return self.substring(from: from, to: end)
}
func substring(length: Int, to: Int?) -> String {
guard let end = to, end > 0, length > 0 else {
return ""
}
let start: Int
if let end = to, end - length > 0 {
start = end - length + 1
} else {
start = 0
}
return self.substring(from: start, to: to)
}
}
그런 다음 다음을 사용할 수 있습니다.
let string = "Hello,World!"
string.substring(from: 1, to: 7)
당신을 얻는다 : ello,Wo
string.substring(to: 7)
당신을 얻는다 : Hello,Wo
string.substring(from: 3)
당신을 얻는다 : lo,World!
string.substring(from: 1, length: 4)
당신을 얻는다 : ello
string.substring(length: 4, to: 7)
당신을 얻는다 : o,Wo
substring(from: Int?, length: Int)
0부터 시작하도록 업데이트 되었습니다.