2017-09-04 47 views
0
var stream: DataStream? = nil 
switch stream { 
    case nil: 
print("No data stream is configured.") 
    case let x?: 
print("The data stream has \(x.availableBytes) bytes available.") 
} 

通过switch optional code Refrenced匹配,上述内容将调用public func ~= <T>(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool功能。并且在此功能的另一开关模式:夫特开关模式与。有些/ .none

public func ~= <T>(lhs: _OptionalNilComparisonType, rhs: T?) -> Bool { 
    switch rhs { 
    case .some(_): 
    return false 
    case .none: 
    return true 
    } 
} 

我的问题是whitch功能将被这种模式叫什么?在Range.swift & Policy.swift中有两个〜=重载函数,它们中的一个会被调用吗?

回答

1

您的问题并不完全清楚,但~=是模式匹配运算符。

func ~=(pattern: ???, value: ???) -> Bool 

通过重写它,你可以创建自己的模式匹配您的自定义类型,并用它为switch(基本上是开关调用此操作)。
这里有一个很好的文章https://appventure.me/2015/08/20/swift-pattern-matching-in-detail/ 你在RangePolicy看到仅仅是该运营商的定制过载,使之与RangePolicy类型工作,因为他们没有为选配。

+0

谢谢,每个开关模式都会调用_>重载指令吗?如果是这样,这个模式会调用哪个函数? 开关RHS { 情况。有些(_): 返回false 情况下.none: 还真 } – Maize

+0

我明白,不是每个开关模式将调用〜>过载功能 – Maize

+0

如果某些类型调用'>'或'=='我猜这取决于'〜='的实现 – Andrea