我在Swift中编写一个结构:
struct LevelDictionary {
let kNumberOfSegments: Int = 10
static func loadLevelData() -> NSDictionary {
for var segmentNumber = 0; segmentNumber < kNumberOfSegments; ++segmentNumber {
//My code here
}
return dictionary
}
}
出于某种原因,我在编译时遇到错误:Instance member 'kNumberOfSegments' cannot be used on type 'LevelDictionary'
。我错过了什么?当我将LevelDictionary设置为Class时,我得到了同样的错误。
答案 0 :(得分:4)
loadLevelData()
是一个静态函数,在&#34; class&#34;水平
LevelDictionary.loadLevelData()
要在静态函数中使用kNumberOfSegments
,它也必须是静态的
static let kNumberOfSegments: Int = 10
答案 1 :(得分:2)
您问题的直接答案是您无法在课程范围内使用属性。
一个不同的答案是你似乎想要一个静态函数,它在做了一定次数的事情之后返回一个字典;这就是为什么你首先有kNumberOfSegments
的原因。但是你真的需要为你不能再使用的东西设一个变量。另一种方法是在类方法中使用默认变量:
struct LevelDictionary {
static func loadLevelData(numberOfSegments: Int = 10) -> NSDictionary {
for segment in 0 ..< numberOfSegments {
// your code here
}
return dictionary
}
}
现在你可以调用没有参数的方法来使用默认的
let dictionary = LevelDictionary.loadLevelData() // Will use 10 segments
或者您可以使用参数覆盖默认
let dictianary = LevelDictionary.loadLevelData(20) // Will use 20 segments
答案 2 :(得分:0)
您不能在静态函数中使用实例成员变量/常量。 (就目标C而言,您不能在类函数中使用实例成员对象)
您应该将kNumberOfSegments
声明为static
或将该功能设为非静态。我更喜欢第一个选项,
struct LevelDictionary
{
static let kNumberOfSegments: Int = 10
static func loadLevelData() -> NSDictionary
{
for var segmentNumber = 0; segmentNumber < kNumberOfSegments; ++segmentNumber
{
//My code here
}
return dictionary
}
}