你如何编写一个扩展来同时支持 [String] 和 [Substring]?
How do you write an extension to support both [String] and [Substring]?
通常,要针对 [String]
编写扩展程序,您可以这样做...
extension Array where Element == String {
....
}
然而,有时我没有[String]
而是[Substring]
。您如何编写支持其中任何一种的扩展程序?
String
和Substring
都符合StringProtocol
协议,
所以你可以定义
extension Array where Element: StringProtocol {
// ...
}
标准库中的许多函数已经被泛化
接受 StringProtocol
个参数,例如 Int
初始值设定项
convenience init?<S>(_ text: S, radix: Int = default) where S : StringProtocol
这样你就可以用 String
和 Substring
来调用它:
let n = Int("1234")
let m = Int("1234".dropFirst())
通常,要针对 [String]
编写扩展程序,您可以这样做...
extension Array where Element == String {
....
}
然而,有时我没有[String]
而是[Substring]
。您如何编写支持其中任何一种的扩展程序?
String
和Substring
都符合StringProtocol
协议,
所以你可以定义
extension Array where Element: StringProtocol {
// ...
}
标准库中的许多函数已经被泛化
接受 StringProtocol
个参数,例如 Int
初始值设定项
convenience init?<S>(_ text: S, radix: Int = default) where S : StringProtocol
这样你就可以用 String
和 Substring
来调用它:
let n = Int("1234")
let m = Int("1234".dropFirst())