定义struct时出现错误消息

时间:2015-10-17 10:02:56

标签: ios swift struct

我在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时,我得到了同样的错误。

3 个答案:

答案 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
    }
}