将项目从swift3迁移到swift4无法覆盖初始化
我试图在我的DatabaseHelper中重写init,但不知怎的。我在super.init调用中得到一个错误将项目从swift3迁移到swift4无法覆盖初始化,swift,Swift,我试图在我的DatabaseHelper中重写init,但不知怎的。我在super.init调用中得到一个错误属性'self.dateFormatter'未初始化我没有得到我在这里做错的地方 public override init() { super.init() //I am getting error here dateFormatter.dateFormat = "yyyyMMdd HHmmss"; do { db
属性'self.dateFormatter'未初始化
我没有得到我在这里做错的地方
public override init() {
super.init() //I am getting error here
dateFormatter.dateFormat = "yyyyMMdd HHmmss";
do {
db = try Connection(dbPath);
try db!.run(FormTbl.create(temporary: false, ifNotExists: true) { t in
t.column(self.ColumnId, primaryKey:true);
t.column(self.FileName);
t.column(self.ReceivedDate);
t.column(self.SentDate);
t.column(self.Status);
t.column(self.AwaitingStatus);
});
try db!.run(SettingTbl.create(temporary: false, ifNotExists:true) {t in
t.column(self.ColumnId, primaryKey:true);
t.column(self.SettingName, unique: true);
t.column(self.SettingValue);
});
try db!.run(PhotoTbl.create(temporary: false, ifNotExists:true) {t in
t.column(self.ColumnId, primaryKey:true);
t.column(self.PhotoFormId);
t.column(self.FileName);
t.column(self.PhotoSentFileName);
t.column(self.ReceivedDate);
t.column(self.SentDate);
t.column(self.Status);
});
try db!.run(GpsTbl.create(temporary: false, ifNotExists:true) {t in
t.column(self.ColumnId, primaryKey: true);
t.column(self.GpsFormId);
t.column(self.Longitude);
t.column(self.Latitude);
t.column(self.Altitude);
t.column(self.DateTime);
});
} catch {
}
}
注意:我正在尝试将我的项目从swift3迁移到swift4.2
我的完整源代码如下:
我真的被困在这里一天了!谁能帮我一下我做错了什么!!任何建议都会大有帮助!提前感谢您收到了该错误,因为您的
日期格式化程序
变量未在类中初始化。您必须在完成init
初始值设定项之前初始化所有变量,否则编译器会因为安全原因而抱怨
在代码中,您声明了以下内容:private let dateFormatter:dateFormatter代码>
但这只是一个没有价值的常数。未指向DateFormatter
类。你还没有初始化它。为了初始化它,您必须为它分配一个DateFormatter()
,例如,在同一行中:
private let dateFormatter=dateFormatter()
通过在init
方法中添加dateFormatter=dateFormatter()
,您也应该能够在init
方法中初始化它,但是您需要将let
替换为var
该代码甚至不能在Swift 3中编译
由于dateFormatter
是类中已声明但未初始化的属性,因此必须在调用super
之前对其进行初始化
public override init() {
dateFormatter = DateFormatter()
super.init()
dateFormatter.dateFormat = "yyyyMMdd HHmmss"
并删除感叹号,dateFormatter应该是非可选的
private let dateFormatter : DateFormatter
除此之外,代码中还有三种错误做法
这是斯威夫特。没有尾随分号
请遵守命名约定,这一行很容易混淆
public var DateFormatter : DateFormatter {
- 所有结构、类和枚举都以大写字母开头
- 所有变量、函数和枚举案例都以小写字母开头李>
共享实例的创建是客观的,并且自Swift 2以来已经过时
您的dateFormatter未在父类中初始化。添加一个dateFormatter=dateFormatter()
,到此为止。很抱歉,我对这一点不太熟悉。你能详细说明一下吗!!我在同一行中遇到错误,因为无法在属性初始值设定项中使用实例成员“DateFormatter”;属性初始值设定项在“self”可用之前运行
我收到一个错误无法按照建议调用非函数类型“DateFormatter”的值
如果我删除括号,我收到一个错误在“super.init”调用之前的属性访问“DateFormatter”中使用的“self”
!这是别人写的非常古老的代码!!尽管我是斯威夫特的新手!但是我知道一些基本的删除了可怕的属性public-var-DateFormatter:DateFormatter{
或者重命名它。这就是为什么大写/小写命名如此重要的原因。