我正在开发一个项目,并且只是尝试创建一个简单自定义类的对象实例:
导入基金会
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
}
}
错误状态:
找不到类型' Set'的初始值设定项。接受类型'(gam1:Int,gam2:Int)'
无法为类型' [Set]'调用初始值设定项没有参数
和
关于这个问题的任何想法?可以设置'该类的名称与保留关键字冲突?
非常感谢, 千瓦
答案 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个参数(因为gam1
和gam2
不是可选的)。所以,你有2个解决方案:
1 - 您在init
电话中添加参数(如下所示):
var mySet = Set(gam1: 1, gam2: 2)
2 - 您将gam1
和gam2
更改为选项,并添加零参数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
}
}