【问题标题】:Trying to declare an array of custom objects in swift试图在swift中声明一组自定义对象
【发布时间】:2017-01-16 21:52:39
【问题描述】:

这是我的代码

    var planetNames = ["mercury", "venus", "earth", "mars", "jupiter", "saturn", "uranus", "neptune", "pluto"] //names of the planets

    for currentRing in 0..<orbitMarkers.count
    {
        var planetNames[currentRing] = planet(size: 1.2)

    }

这是我的课

class planet
{
   var size: CGFloat
   init(size: CGFloat)
   {
     self.size = size
   }
}

我想弄清楚如何制作一个包含 8 个新“行星”对象的数组

【问题讨论】:

  • 旁注:我建议对类使用大写驼峰式,因此以大写字符开头,并且新单词的每个第一个字符都大写,例如:'PlanetViewController',或者在本例中为'Planet'跨度>

标签: arrays swift


【解决方案1】:

你可以这样做:

class planet
{
    var name: String
    var size: CGFloat
    init(name: String, size: CGFloat)
    {
        self.size = size
        self.name = name
    }
}

var planets: [planet] = []
var mercury = planet(name: "Mercury", size: 20)
planets.append(mercury)

我为您的行星类添加了一个名称变量,然后数组初始化为 var planets: [planet],作为示例,我添加了一个行星供您查看它是如何完成的。

【讨论】:

  • 太棒了。谢谢!
【解决方案2】:

看起来你已经有一个轨道标记数组..你有一个大小数组吗?

另外,用 UpperCamelCase 命名你的类

class Planet {
    let name: String
    let size: CGFloat
}

let sizes: CGFloat = [1,2,3,....] // planet sizes
let names = ["mercury", "x", ...] // planet names

let planets = zip(names, sizes).map{Planet(name: $0, size: $1)}

另外.. 尺寸有点不伦不类。考虑将其更改为半径、体积、直径或任何实际代表的值。

快速解释 - zip 将两个大小相等的数组组合成一个元组数组,将元素成对地附加到一个元组中。数组 1 中的元素 1 与数组 2 中的元素 1 配对,以此类推。

Map 对由压缩产生的元组数组中的每个元组执行操作,为每个元组返回一个 Planet 对象。

【讨论】:

    【解决方案3】:

    这就是您在 Swift 3

    中的做法
    var planets = [planet]() // Initialize an array of type planet
    var mercury = planet()   // Initialize an instance of type planet
    mercury.size =           // set size on mercury
    planets.append(mercury)  // Add mercury to the array planets
    

    这是未经测试的,但这些是一些使用自定义类型数组的基本语句。

    编辑:我刚刚注意到您设置了一个初始化程序,这意味着您可以制作这样的行星。

    var earth = planet(size: earthSizeHere) // Use initializer
    planets.append(earth)
    

    【讨论】:

      【解决方案4】:

      自定义类数组示例 swift 3.0

      class Planet {
          var name: String!
          var size: CGFloat!
      
          init(name:String,size:CGFloat) {
              self.name = name
              self.size = size
          }
      }
      
      var planets = [Planet]()
      let planet = Planet(name: "Earth", size: 1.2)
      planets.append(planet)
      
      for Planet in planets {
          print(Planet.name)
      }
      

      【讨论】:

        猜你喜欢
        • 2015-03-25
        • 1970-01-01
        • 2017-08-11
        • 2013-05-20
        • 2021-12-31
        • 2019-07-28
        • 2015-12-02
        • 1970-01-01
        • 2019-02-23
        相关资源
        最近更新 更多