您可以将抛出添加到方法签名中,然后抛出一个自定义错误。我还将使该方法通用并扩展
StringProtocol
而不是
String
支持
Substring
也请注意,约束到
RangeReplaceableCollection
需要能够使用
mutating func insert<S>(contentsOf newElements: S, at i: Index) where S: Collection, Element == S.Element
:
extension String {
enum Error: Swift.Error {
case invalidIndexDistance
}
}
extension StringProtocol where Self: RangeReplaceableCollection {
mutating func insert<S: StringProtocol>(contentsOf string: S, at distance: Int) throws {
guard let index = self.index(startIndex, offsetBy: distance, limitedBy: endIndex) else {
throw String.Error.invalidIndexDistance
}
insert(contentsOf: string, at: index)
}
}
var substring = "abcde".dropFirst()
do {
try substring.insert(contentsOf: "fgh", at: 2)
substring // "bcfghde"
} catch {
print(error)
}