【问题标题】:Error message when defining struct定义结构时的错误消息
【发布时间】:2015-10-17 10:02:56
【问题描述】:

我正在用 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 设置为类时,我得到了同样的错误。

【问题讨论】:

  • 你不能将 kNumberOfSegments 初始化为结构体....编译器允许它....pl。删除初始化

标签: ios swift struct


【解决方案1】:

loadLevelData() 是在“类”级别调用的静态函数

LevelDictionary.loadLevelData()

要在静态函数中使用kNumberOfSegments,它也必须是静态的

static let kNumberOfSegments: Int = 10

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      您不能在静态函数中使用实例成员变量/常量。 (就Objective 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
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2011-02-14
        • 2013-05-29
        • 1970-01-01
        • 2016-07-27
        • 2016-09-03
        • 2022-01-23
        相关资源
        最近更新 更多