【问题标题】:Type does not have a member类型没有成员
【发布时间】:2015-08-14 05:33:34
【问题描述】:

我正在玩一个 Swift 操场上的新课程。出于某种原因,我不断收到一个错误,即类“没有成员类型”,其名称为之前定义的三行常量。代码如下:

import Foundation
class DataModel {
    let myCalendar = NSCalendar.autoupdatingCurrentCalendar()

    var myData = [NSDate : Float]()
    let now  = NSDate()
    let components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now)
}

Xcode Beta6 在倒数第二行一直给我一个错误,说“DataModel.Type 没有名为 'myCalendar' 的成员”

虽然我不认为它应该有所作为,但我尝试将 myCalendar 定义为 var。

【问题讨论】:

    标签: swift swift-playground


    【解决方案1】:

    您不能初始化引用同一类的另一个实例属性的实例类属性,因为不能保证它们将以什么顺序被初始化 - swift 禁止这样做,因此(误导性)编译器错误。

    您必须在构造函数中移动初始化,如下所示:

    let components: NSDateComponents
    
    init() {
        self.components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now)
    }
    

    【讨论】:

    • 工作就像一个魅力。谢谢你,安东尼奥!
    【解决方案2】:

    我同意@Antonio 如果您不想使用init,另一种方法可能是创建struct

    class DataModel {
    
        struct MyStruct {
            static var myCalendar:NSCalendar = NSCalendar.autoupdatingCurrentCalendar()
            static let now  = NSDate()
        }
    
        var myData = [NSDate : Float]()
    
        var components = MyStruct.myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: MyStruct.now)
    }
    

    测试

    var model:DataModel = DataModel()
    var c = model.components.year  // 2014
    

    【讨论】:

    • 这也有效;我将@Antonio 的答案标记为正确只是因为它更适合我的整个项目。谢谢!
    猜你喜欢
    • 2016-09-18
    • 2019-02-18
    • 2019-02-18
    • 2019-09-17
    • 2019-04-27
    • 2021-06-05
    • 2016-07-08
    相关资源
    最近更新 更多