where 条件约束
-
var eHttpCode:(Int, String) = (404, "Not Found")
switch eHttpCode
{
/// where 约束 eCode在 [200, 300) 时:
case let (eCode, _) where eCode >= 200 && eCode < 300:
print("---当eCode在[200, 300)才 输出 --")
default:
print("Bad request.")
}
-
let eArrInt = [24, 32, 30, 36, 28, 33]
/// where 约束 eArrInt 中的元素 >= 31 时才遍历输出:
for eI in eArrInt where eI >= 31
{
print("---where 约束 eArrInt 中的元素 >= 31 时才遍历输出: \(eI)--") //32,36,33
}
-
// where 约束 泛型 T类型 必须遵循 Decodable协议:
func getDecodableResult<T>(eT : T) where T : Decodable
{
print(eT)
}
enum HTTPError : Error
{
case code(Int)
}
do
{
try requestWithError()
}
catch HTTPError.code(let code) where code == 408
{
print("Request time out.")
}
func requestWithError() throws
{
throw HTTPError.code(400)
}
- where 和 associatedtype 搭配使用:
// where 和 associatedtype 搭配使用:
protocol EProtocolA
{
associatedtype eA : IteratorProtocol
associatedtype eB : Sequence where eB.Iterator.Element == eA.Element
// eB遵循Sequence协议, 且 where 约束 eB中的元素须和eA的元素类型一样;
}
// where 约束 对遵循EProtocolA协议的同时,且遵循Equatable协议 的类型进行扩展:
extension EProtocolA where Self : Equatable
{
func yeTest()
{
print("---where 约束 对遵循EProtocolA协议的同时,且遵循Equatable协议 的类型进行扩展:--")
}
}
截屏2023-01-24 22.50.41.png
截屏2023-01-24 22.50.57.png
截屏2023-01-24 22.51.12.png
截屏2023-01-24 22.51.14.png
截屏2023-01-24 22.51.27.png
截屏2023-01-24 22.51.41.png
截屏2023-01-24 22.51.47.png
截屏2023-01-24 22.51.57.png
截屏2023-01-24 22.52.05.png
截屏2023-01-24 22.52.13.png