这里有两个简单的问题来初始化这个结构。
I get 'TouramentScores':不能将'TournNames‘类型的值转换为预期的参数类型,或者初始化字符串数组(我得到错误:不能将'String’类型的值转换为预期的参数类型‘TouramentScores’)。
假设我试图建立一个结构来模拟网球运动员的分数和他们在每个主要比赛中的所有比赛(只是为了好玩)。每场比赛都有一个名字(例如温布尔登)和一系列的分数(例如,在开场比赛中,他们的分数可能是"4-6,6-4,7-6,6-2“).每场比赛最多7场。每个球员应该有一个四场比赛的数组(名字和分数数组),最终应该有一系列的球员。我也在尝试使用枚举不太成功。理想的情况是,如果我想知道费德勒今年在温布尔登的第三场比赛中表现如何,我会得到一些类似player.tournament.wim.Roundof32之类的东西。但在我还没来得及玩这个游戏之前,我似乎连一场比赛都无法提供虚假的数据。
有什么想法吗?我不认为这是那么难的问题,但我只是不知道每一个。关于有问题的两行,请参见下面的“*此行”。
// tournament name enum
enum TournNames : String {
case wim = "Wimbledom"
case fo = "French Open"
case ao = "Australian Open"
case uo = "US Open"
}
//
struct TournamentName {
var Tname : TournNames // = .wim
}
// This is the structure for a tournament score array with some dummy values.
struct TouramentScores {
var Match1 : String = "7-6, 6-4, 3-6, 7-6"
var Match2 : String = "7-6, 6-4, 3-6, 7-6"
}
// This is one entire Tournament record for one player = tournament name + array of scores ... the next goal but not used here until I get over these hurdles
struct TournamentResult {
var TournamentName : TournNames = .wim
var Scores : TouramentScores
}
// ... finally the structure of a player ...
struct DummyTennisPlayer {
var LastName : String // last name
var FirstName : String //first name
var TN : TournamentName
var TS : TouramentScores
// var WimRes : TournamentResult // to start a single tournament
// var SeasonResults : [TournamentResult] // ultimately should be an array of 4 tournaments
}
// trying to initialize some dummy data without success after trying several things
extension DummyTennisPlayer {
static var dummyResults : [DummyTennisPlayer] {
[
DummyTennisPlayer.init(
LastName : "Federer",
FirstName: "Roger",
TN : TournNames.wim // **** this line
,
TS : ["XX", "yy"] /// *** this line
)
]
}
}
发布于 2021-04-19 23:52:26
正如我认为您正在发现的,一个简单的嵌套类型系列不太可能在这里削减它。一旦你找到了像“罗杰·费德勒在今年温布尔登的第三场比赛中表现如何”这样的实体,比如球员、锦标赛、比赛和查询,你就成为了使用数据库的候选人,在数据库中,你可以操纵一对多、多对多的关系。我不能告诉您要使用哪个数据库,无论如何,这是一个意见问题;从您到目前为止所说的情况来看,SQLite就足够了(而且我个人并不是这样的核心数据的粉丝)。
发布于 2021-04-20 00:11:50
我想您的代码是一种练习,所以在您稍后讨论核心数据或SQLite之前,
extension DummyTennisPlayer {
static var dummyResults: [DummyTennisPlayer] = [
DummyTennisPlayer(LastName: "Federer", FirstName: "Roger", WimbledomResult: TournamentResult(Scores: TouramentScores()))
]
}
应该回答你的问题。
1-若要初始化Swift struct
,请使用以下语法:
MyStruct(property1: "my property1 value", property2: "my property2 value")
2- TournamentResult中的锦标赛名称属性已经设置为.wim,因此您只需要初始化Score。由于您的TournamentScores属性已经全部设置,您只需要将TournamentScores()的一个实例传递给TournamentResult(Scores:).顺便说一句,变量或结构属性的名称的第一个字母只使用小写: var l__astName或
我认为您混淆了“多维(数组)结构”这个术语(它只是嵌套在其他数组中的数组,比如:struct
[ 1、2、3、2、3、4、3、4、4、4、5]) 和 objects。您可能不应该在这里广泛使用structs。
不要犹豫地回顾您决定使用枚举、structs或数组的方式。您的代码可能会工作,但很难阅读和使用(例如:如果将所有集分数都放在一个字符串中,您将如何访问特定的集合分数?为什么不使用数组呢?)
https://stackoverflow.com/questions/67169665
复制相似问题