Advanced Pattern Matching

Directory Traversion

released Fri, 15 Feb 2019
Swift Version 5.0

Directory Traversion

Imagine you want to traverse a file hierachy and find:

  • all "psd" files from customer1 and customer2
  • all "blend" files from customer2
  • all "jpeg" files from all customers.
guard let enumerator = FileManager.default.enumeratorAtPath(\"/customers/2014/\")

     else { return }



for url in enumerator {

     switch (url.pathComponents, url.pathExtension) {



     // psd files from customer1, customer2

     case (let f, \"psd\") 

             where f.contains(\"customer1\") || f.contains(\"customer2\"): print(url)



     // blend files from customer2

     case (let f, \"blend\") 

             where f.contains(\"customer2\"): print(url)



     // all jpg files

     case (_, \"jpg\"): print(url)



     default: ()

     }

}

Note that contains stops at the first match and doesn't traverse the complete path. Again, pattern matching lead to very succinct and readable code.