2017-09-05 30 views
0

我正在从编码Obj-c过渡到Swift 3很长一段时间。所以我认为我理解可选项的想法,但我对这个问题感到困惑。假设我有一个叫Monster的课。我也有一个叫Town的结构体。Swift 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.") 
     } 

    } 
} 

在moveToTown(_ thisTown:镇),我怎么能检查是否怪物还没有名字,但镇呢?我想改变这一行:

} else if let strName = name { 

喜欢的东西

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

,然后添加其他条件

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

感谢,如果有一般的任何可能被清理随时批评。

回答

2

您不能使用town?.name,因为town不是可选的。

而且不需要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.") 
    } 
}