         return city.hashValue
     }
 
-    init(city:City) {
+    private init(city:City) {
         self.city = city
     }
 


import Foundation


public struct PlayerCard : Equatable, Hashable {
    public let city:City

    public var hashValue:Int {
        return city.hashValue
    }

    init(city:City) {
        self.city = city
    }



    public static var allCards:Set<PlayerCard> = [algiers, atlanta, baghdad, bangkok, beijing, bogotá, buenosaires, cairo, chennai, chicago, delhi, essen, hochiminhcity, hongkong, istanbul, jakarta, johannesburg, karachi, khartoum, kinshasa, kolkata, lagos, lima, london, losangeles, madrid, manila, mexicocity, miami, milan, montreal, moscow, mumbai, newyork, osaka, paris, riyadh, sanfrancisco, santiago, sãopaulo, seoul, shanghai, stpetersburg, sydney, taipei, tehran, tokyo, washington]

    /**
     Finds all PlayerCard values with names that contain the specified portion of a name.

     - returns: All PlayerCards whose names contain the string `portionOfName` anywhere
     in their name.

     - remark: It is sufficient to pass just the first 4 characters of any name
     to ensure uniquenss and to return only one PlayerCard. For example the following
     code will ensure `myCard` gets the value `City.santiago`.

     ````
     let myCard = PlayerCard.findByName("sant").first!
     ````
     */
    public static func findByName(name:String) -> [PlayerCard] {
        return allCards.findByName(name)
    }
