Ios 在单独的类[Swift]中声明变量的类类型
这里我有一个类,Player,它有一个类型变量,Sport,其中可以是篮球或足球。我希望能够在球员声明中声明运动类型。有什么建议吗Ios 在单独的类[Swift]中声明变量的类类型,ios,swift,swift-playground,Ios,Swift,Swift Playground,这里我有一个类,Player,它有一个类型变量,Sport,其中可以是篮球或足球。我希望能够在球员声明中声明运动类型。有什么建议吗 class Soccer : Sport { override var players : Int { get { return 11 } } } class Basketball : Sport { override var players : Int { get { return 5 } } } class Sport { var
class Soccer : Sport {
override var players : Int { get { return 11 } }
}
class Basketball : Sport {
override var players : Int { get { return 5 } }
}
class Sport {
var teamName: String
var players: Int { get { return 0 } }
init(teamName: String) {
self.teamName = teamName
}
}
class Player {
let sport : Sport?
init? (typeOfSport: Soccer, teamName: String) {
self.sport = Soccer(teamName: teamName)
}
init? (typeOfSport: Basketball, teamName: String) {
self.sport = Basketball(teamName: teamName)
}
}
let me = Player(typeOfSport: Soccer(), teamName: "chelsea")
let him = Player(typeOfSport: Basketball(), teamName: "wizards")
在这种情况下,我建议你的例子就是这个解决方案,我不知道这是否是更好的方法,但在我关于OOP的研究中,我相信这是一个很酷的方法来做你的例子
protocol Sport {
func getTotalPlayers() -> Int
}
class Soccer: Sport {
func getTotalPlayers() -> Int {
return 11
}
}
class Basketball: Sport {
func getTotalPlayers() -> Int {
return 5
}
}
class Team {
private var sport: Sport
private var name: String
init(sport:Sport, name:String) {
self.sport = sport
self.name = name
}
func getTeamName() -> String {
return name
}
func getSport() -> Sport {
return sport
}
}
class Chelsea: Team {
init() {
super.init(sport: Soccer(), name: "Chelsea")
}
}
class Wizards: Team {
init() {
super.init(sport: Basketball(), name: "Wizards")
}
}
class Player {
private var team: Team
init(team: Team) {
self.team = team
}
func getTeamName() -> String {
return self.team.getTeamName()
}
func getSport() -> Sport {
return self.team.getSport()
}
}
let me = Player(team: Chelsea())
let him = Player(team: Wizards())
您还可以使用枚举来执行以下操作:
enum Sport {
case Soccer (teamName : String)
var players: Int {
switch self{
case .Soccer: return 11
default: return 0
}
}
}
class Player {
let sport: Sport?
init? (s : Sport){
self.sport = s
}
}
Sport.Soccer (teamName: "Cambuur").players
我找到了一个方法。。如果您在播放器初始化函数Sport.Type中声明了typeOfSport,然后将Sport初始化方法设置为所需的,如
class Soccer : Sport {
override var players : Int { get { return 11 } }
}
class Basketball : Sport {
override var players : Int { get { return 5 } }
}
class Sport {
var teamName: String
var players: Int { get { return 0 } }
required init(teamName: String) {
self.teamName = teamName
}
}
class Player {
let sport : Sport?
init? (typeOfSport: Sport.Type, teamName: String) {
self.sport = Soccer(teamName: teamName)
}
init? (typeOfSport: Basketball, teamName: String) {
self.sport = Basketball(teamName: teamName)
}
}
let me = Player(typeOfSport: Soccer.self, teamName: "chelsea")
let him = Player(typeOfSport: Basketball.self, teamName: "wizards")
您可以通过删除get关键字及其bracesvar播放器来简化只读计算属性的声明:Int{return 11}Fala Vitor,eu acho que nesse caso voce não precisa usar funões se vocêlever em conta que não precisa passar nenhum parametro。func getTotalPlayers()->Int{return 11}voce pode trocar por uma只读计算属性。var getTotalPlayers:Int{return 11}。这是美国在线的一个例子。因此,我们有可能创建一个完整的用户界面,以实现对用户界面的只读访问。这是一个很好的例子,因为我们的目标是共同的。这是一个很好的例子。