如果我宣布
public class A: NSObject {
public class X { }
public init?(x: X? = nil) { }
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.使用它时let a = A(),初始化程序按预期调用.
现在,我想让嵌套类成为X私有,并且参数化init也是如此(当然必须是).但是一个简单的init?()应该像以前一样公开.所以我写
public class B: NSObject {
private class X { }
private init?(x: X?) { }
public convenience override init?() { self.init(x: nil) }
}
Run Code Online (Sandbox Code Playgroud)
但是这会给init?()初始化程序带来错误:可用的初始化程序'init()'不能覆盖不可用的初始化程序,并且覆盖的初始化程序为public init()in NSObject.
为什么我可以有效地声明一个A.init?()没有冲突的初始化器但不是B.init?()?
奖金问题:为什么我不允许使用可用的初始化程序覆盖不可用的初始化程序?相反的是合法的:我可以使用不可用的覆盖可用的初始化程序,这需要使用强制super.init()!,因此引入了运行时错误的风险.对我来说,让子类具有可用的初始化器感觉更加明智,因为功能的扩展会带来更多的失败机会.但也许我在这里遗漏了一些东西 - 解释非常感谢.
我有一个Swift函数做这样的事情:
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
Run Code Online (Sandbox Code Playgroud)
因为__WORDSIZE是常量,所以编译器总是在开关体中给出至少一个警告.实际标记了哪些行取决于我正在构建的目标(例如iPhone 5对6;有趣的是iPhone 5给出了64位情况的警告,而iPhone 6给出了32位和默认的两个警告).
我发现,雨燕的等价物#pragma是// MARK:,所以我尝试
// MARK: clang diagnostic push
// MARK: clang diagnostic ignored "-Wall"
func f() -> Int {
switch (__WORDSIZE) {
case 32: return 1
case 64: return 2
default: return 0
}
}
// MARK: clang diagnostic pop
Run Code Online (Sandbox Code Playgroud)
但警告仍然存在,MARKs似乎没有效果.
作为一种解决方法,我现在有这样的事情:
#if arch(arm) || arch(i386)
return …Run Code Online (Sandbox Code Playgroud) 我担心我不明白.Net的DateTime类如何处理本地时间戳(我住在德国,所以我的语言环境是de_DE).也许有人可以启发我一点;-)
该DateTime构造可以用一年被调用,一个月等参数.另外,可以提供DateTimeKind值,,或(=默认值).LocalUtcUnspecified
例:
DateTime a = new DateTime(2015, 03, 29, 02, 30, 00, DateTimeKind.Local);
DateTime b = new DateTime(2015, 03, 29, 02, 30, 00, DateTimeKind.Utc);
DateTime c = new DateTime(2015, 03, 29, 02, 30, 00, DateTimeKind.Unspecified);
DateTime d = new DateTime(2015, 03, 29, 02, 30, 00);
Run Code Online (Sandbox Code Playgroud)
根据定义,值c和d是相同的.但如果我将所有四个相互比较,那么所有四个都是相同的.检查VS调试器中的对象会显示所有Ticks值(InternalTicks以及相同).但是,内部dateData值不同,但比较运算符显然会忽略它们.
您可能已经注意到,我在今年3月29日02:30 AM构建了一个值.这个时刻在我们的时区中不存在,因为切换到夏令时会跳过它.所以我原本期望得到构造对象的异常a,但这并没有发生.
此外,DateTime还有一种方法ToUniversalTime()可将解释为本地时间的值转换为等效的UTC值.为了测试,我按如下方式运行循环:
DateTime dt = new DateTime(2015, 03, 29, 01, 58, …Run Code Online (Sandbox Code Playgroud) 大多数 LoRaWAN 节点没有电池供电的 RTC(实时时钟)。唯一可用的时钟是控制器中的“自启动以来的时间”计数器。尽管 LoRaWAN 数据包在网关接收时带有时间戳,但节点上的事件与实时(例如 UTC)之间没有严格的关系。如果事件在通过 LoRa 传输之前在节点中排队,这一点尤其重要。那么,是否有一种机制可以以相当精确的方式将实时部署到节点呢?当然,在收到下一条消息时将实时标记作为上传电报发送到节点是不够的。时间戳是否在连接范围内发送?