2017-09-05 5 views
0

私はObj-cをコード化してからSwift 3に移行しています。だから私はオプションの考えを理解していると思うが、私はこの問題を混乱させる。モンスターというクラスがあるとします。私は町と呼ばれる構造体も持っています。 moveToTown(_ thisTown:タ​​ウン)でスイフト3:クラスと構造のオプション

struct Town { 
    var population: Int = 0 
    var name: String? 
    var hasSherrif: Bool? 
    var hasTheater: Bool? 
    var hasTownhall: Bool? 
    var hasSchool: Bool? 
    var hasGeneralStore: Bool? 
    var numOfHomes: Int = 0 
} 

とモンスター...

class Monster { 
    var town: Town? 
    var name: String? 

    func moveToTown(_ thisTown: Town) { 
     town = thisTown 
     if let strName = name, let strTownName = town?.name { 
      print("\(strName) moved to \(strTownName)") 
     } else if let strName = name { 
      print("\(strName) move to a town with no name") 
     } else { 
      print("The monster moved to a town. Might help if you give stuff names, just saying.") 
     } 

    } 
} 

モンスターに名前がないが、町が行う場合、どのように私がチェックすることができますか?私は、この行を変更したいと思います:

} else if let strName = name && town?.name == nil { 

のようなものに

} else if let strName = name { 

をしてから、別の条件付き

} else if strName == nil && let strTownName = town?.name { 
} 

感謝を追加して、クリーンアップすることができ、一般的には何があるのであれば自由に批判する。

答えて

2

town?.nametownはオプションではないため、使用できません。

そして、town = thisTown行の必要はありません。パラメータにはtownという名前を付けてください。

私はそれをこのように記述します。

func moveToTown(_ town: Town) { 
    if let name = name { 
     if let townName = town.name { 
      print("\(name) moved to \(townName)") 
     } else { 
      print("\(name) move to a town with no name") 
     } 
    } else { 
     print("The monster moved to a town. Might help if you give stuff names, just saying.") 
    } 
} 
関連する問題