2014-06-08 72 views
1

爲什麼下面的alternative1完美無缺地工作?爲什麼這項工作(不使用與使用可選項)?

宏是假的,當然還有僅供說明用途:

func commonPrefixLength<T: Swift.Collection, U: Swift.Collection where 
    T: Sequence, U: Sequence, 
    T.GeneratorType.Element: Equatable, 
    T.GeneratorType.Element == U.GeneratorType.Element> 
    (collection1: T, collection2: U) -> T.IndexType.DistanceType { 
     var collection2generator = collection2.generate() 

     var i: T.IndexType.DistanceType = 0 

     for element1 in collection1 { 
#if alternative1 
      let element2 = collection2generator.next() 

      if (element1 != element2) { 
       return i 
      } 
#elseif alternative2 
      let optionalElement2 = collection2generator.next() 

      if let element2 = optionalElement2 { 
       if (element1 != element2) { 
        return i 
       } 
      } 
      else { 
       break 
      } 
#endif 

      i++ 
     } 

     return i 
} 
commonPrefixLength("abX", "abc") 

Here is a gist of the above.

回答

1

在比較,您正在使用非可選(element1)比較可選(element2)。

if (element1 != element2) { 
    return i 
} 

比較可選與非可選不存在任何問題。爲什麼會有?如果element2nil,則上述比較的結果將是true。這是明確的。

非可選項可隱式轉換爲可選項,否則您將無法爲可選項指定非可選項。

let nonOptional = "" 
var optional: String? = nonOptional 
+0

謝謝@Sulthan。 :) – JanX2

相關問題