试图在swift中声明一个自定义对象数组

时间:2017-01-16 21:52:39

标签: arrays swift

这是我的代码

    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个新的&#34;星球&#34;对象

4 个答案:

答案 0 :(得分:5)

你可以这样做:

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行星:[planet]作为一个例子,我已经为你添加了一个星球,看看它是如何完成的。

答案 1 :(得分:1)

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

另外,使用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对象。

答案 2 :(得分:1)

自定义类数组示例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)
}

答案 3 :(得分:0)

您可以在 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)