美文网首页
where 和默认匹配

where 和默认匹配

作者: fordring2008 | 来源:发表于2017-02-04 09:36 被阅读11次

/* where 的使用场合:  

1>在 switch 语句中,来限定某些条件的 case, 下面例子是 模式匹配的标准写法  */let name = ["王小二", "张三", "李四", "王二小"]name.forEach{    switch $0 {    case let x where x.hasPrefix("王"):        print("\(x)是笔者本家")    default:        print("你好,\($0)")    }}/* 王小二是笔者本家 你好,张三 你好,李四 王二小是笔者本家 *//* 

2  for 循环中做类似的条件限定

 *

/let num : [Int?] = [48, 99, nil

]let n = num.flatMap{ $0 }

print(n)

for score in n where score > 60 {   

 print("及格了 \(score)")}

num.forEach{    

if let score = $0, score > 60 {        

print("及格了 \(score)")   

 } else {        

print(":(")   

 }

}

// 上面的代码在 swift3 中改动成了,去掉了where , 变得更加准确表达。 但是有些场合,值有使用 where 才能准确表达。例如

class MyClassA {}

let a : String = "1bc"

let b = a

if  a != b {    }

// < 小于号的定义  要求 T.RawValue 必须实现 Comparable 协议

// public func <(lhs: T, rhs: T) -> Bool

// 3. 在 扩展协议的时候,我们希望一个协议扩展的默认实现只有在某些特定的条件下使用。

// 比如 下面的扩展定义

//extension Sequence where Self.Iterator.Element : Comparable {

//    public func sorted() -> [Self.Iterator.Element]

//}

// 对 Seguence 协议进行扩展,条件是,里面的元素实现 Comparable 协议,扩展的方法 sorted

// 例如

let sortableArray : [Int] = [3,1,2,4,5]

let unsortableArray: [Any?] = ["Hello", 4, nil]

sortableArray.sorted()

unsortableArray.sorted()  // 编译错误

相关文章

网友评论

      本文标题:where 和默认匹配

      本文链接:https://www.haomeiwen.com/subject/utejittx.html