首页 > 解决方案 > Swift:多维结构组织和初始化

问题描述

在初始化这个结构时,这里有两个简单的问题。

  1. 一个是枚举值 TS(我收到错误:无法将类型“TournNames”的值转换为预期的参数类型“TournamentName”)
  2. 另一个是初始化字符串数组(我收到错误:无法将类型“[String]”的值转换为预期的参数类型“TourmentScores”

假设我正在尝试建立一个结构来模拟网球运动员的得分以及他们在每个主要锦标赛中的所有比赛(只是为了好玩)。每个锦标赛都有一个名称(例如温布尔登)和该球员的一系列分数(例如,在首场比赛中,他们的分数可能是“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 
               )
         ]
      }
   }

标签: arraysswiftmultidimensional-arraystruct

解决方案


正如我认为您正在发现的那样,一系列简单的嵌套类型不太可能在这里解决问题。一旦你找到像球员、锦标赛、比赛和查询这样的实体,比如“罗杰·费德勒在今年第三场温布尔登比赛中的表现”,你就成为了使用数据库的候选人,你可以在其中操作一对多和多对多的关系。我不能告诉你使用什么数据库,反正这是一个见仁见智的问题;从你到目前为止所说的来看,SQLite 就足够了(我个人并不是仅仅为了这种事情而喜欢 Core Data)。


推荐阅读