小编Ale*_*zyb的帖子

在 Objective-C 中使用 Swift `enum` 作为属性类型

我有一个enum像这样定义的 Swift:

@objc enum SomeEnum: Int {
  case one, two
}
Run Code Online (Sandbox Code Playgroud)

我可以SomeEnum正常在 Objetive-C 文件中使用,但是当我想在头文件中声明一个属性时,如下所示:

@property (nonatomic, assign) SomeEnum someEnum;
Run Code Online (Sandbox Code Playgroud)

编译器给出错误信息Unknown type name 'SomeEnum'。有趣的是我可以在类的私有接口中创建一个属性。我还尝试清理构建文件夹,但没有帮助。文件<module>-Swift.h已导入到.pch文件中。你知道问题的根源是什么吗?

enums objective-c ios swift

5
推荐指数
1
解决办法
3371
查看次数

静态让带有自动更新当前时区的日历不起作用

在我的应用程序中,我gregorian在SharedCalendar类中有一个静态属性,其定义如下:

static let gregorian: Calendar = {
    var calendar = Foundation.Calendar(identifier: .gregorian)
    calendar.timeZone = TimeZone.autoupdatingCurrent
    return calendar
}()
Run Code Online (Sandbox Code Playgroud)

当我想访问特定时区中某个日期的某一天时,我正在调用:

SharedCalendar.gregorian.dateComponents([ .day ], from: someDate).day!
Run Code Online (Sandbox Code Playgroud)

让我们说someDate是Date(timeIntervalSinceReferenceDate: 512658000.0)哪个是2017-03-31 13:00:00 +0000。

当我开始在温哥华时区中的应用程序中的SharedCalendar.gregorian.timeZone财产具有价值America/Vancouver (autoupdatingCurrent)和的结果SharedCalendar.gregorian.dateComponents([ .day ], from: someDate).day!就是31 这是正确的。

当我将应用程序置于后台并将时区切换到悉尼并再次运行该应用程序时,该SharedCalendar.gregorian.timeZone属性具有值Australia/Sydney (autoupdatingCurrent)(这是正确的),但结果SharedCalendar.gregorian.dateComponents([ .day ], from: someDate).day!是31 哪个是错误的(应该是1)。

当我将gregorian属性的定义更改为 a 时var:

var gregorian: Calendar …
Run Code Online (Sandbox Code Playgroud)

timezone static calendar ios swift

5
推荐指数
1
解决办法
1205
查看次数

标签 统计

ios ×2

swift ×2

calendar ×1

enums ×1

objective-c ×1

static ×1

timezone ×1