无法创建类对象或类对象数组

时间:2016-05-08 16:20:12

标签: swift

我正在开发一个项目,并且只是尝试创建一个简单自定义类的对象实例:

导入基金会

class Set {

    private var gam1: Int!
    private var gam2: Int!

    init (gam1: Int, gam2: Int) {
        self.gam1 = gam1
        self.gam2 = gam2
    }

    //returns set info as array
    func getStats () -> [Int] {
        let arr = [gam1!, gam2!]
        return arr
    }

}

该类只存储一些变量供以后使用,我想要一个这样的对象数组来存储多个值。但是,当我尝试在另一个类中创建该类的n实例时,我得到错误:

import Foundation
    class AnotherClass {

var mySet = Set(gam1: 6, gam2: 5) //error 1

   //array of set objects
    var setArray = [Set]()  // error 2

    //returns array of set objects
    func getSets () -> [Set] {  //error 3
    return setArray
    }

}

错误状态:

  1. 找不到类型' Set'的初始值设定项。接受类型'(gam1:Int,gam2:Int)'

  2. 的参数列表
  3. 无法为类型' [Set]'调用初始值设定项没有参数

    1. 参考通用类型' Set'需要< ...>
    2. 中的参数

      关于这个问题的任何想法?可以设置'该类的名称与保留关键字冲突?

      非常感谢, 千瓦

2 个答案:

答案 0 :(得分:3)

  

您遇到的问题是由于Swift标准库中的Set与您定义的库之间存在命名冲突。

永远一个好主意。相反,给它一个更具描述性的名称(并且不会与其他任何东西发生冲突)。例如,将其称为gamHolder并将其初始化为gamHolder(gam1: <an int>, gam2: <another int>)

  

另外,如果你在init函数中定义了变量,则不需要强制解包选项。

例如:

class myClass {
    var myInt: Int

    init(anInt: Int) {
        myInt = anInt
    }
}

答案 1 :(得分:0)

您在init方法中定义了2个参数(因为gam1gam2不是可选的)。所以,你有2个解决方案:

1 - 您在init电话中添加参数(如下所示):

 var mySet = Set(gam1: 1, gam2: 2) 

2 - 您将gam1gam2更改为选项,并添加零参数init:

class Set {

    private var gam1: Int?
    private var gam2: Int?

    init() {
    }

    init(gam1: Int, gam2: Int) {
        self.gam1 = gam1
        self.gam2 = gam2
    }

    // returns set info as array
    func getStats() -> [Int] {
        let arr = [gam1!, gam2!]
        return arr
    }
}

所以,您可以这样称呼它:var mySet = Set()

另外:注意:Set是Swift标准库中使用的类。使用与Swift标准库相同的类名称绝不是一个好主意。像TenisSet这样的名称会更好。

修改

以下是重命名类的最终工作示例:

class TenisSet {

    private var gam1: Int?
    private var gam2: Int?

    init() {
    }

    init(gam1: Int, gam2: Int) {
        self.gam1 = gam1
        self.gam2 = gam2
    }

    // returns set info as array
    func getStats() -> [Int] {
        let arr = [gam1!, gam2!]
        return arr
    }
}

class AnotherClass {

    var mySet = TenisSet()

    // array of set objects
    var setArray = [TenisSet]() 

    // returns array of set objects
    func getSets() -> [TenisSet] {
        return setArray
    }
}