我有以下类结构:
class JsonHelper {
//for tests only
struct arrivalScan {
let TOID: String
let UserId: String
let GateId: String
let TimeStamp: String
}
func sendArrival(scan: arrivalScan){
//do something
}
}
在我的视图控制器中,我正在尝试创建初始化arrivalScan:
let scan = JsonHelper.arrivalScan.init(TOID:"D/0098/123456",UserId:"O0124553",GateId: "G/0098/536371",TimeStamp: "11/04/2018 11:51:00")
然后将其作为参数传递给sendArrival
JsonHelper
函数
JsonHelper.sendArrival(scan)
但是得到错误' JsonHelper.arrivalScan'不能转换为' JsonHelper'
我做错了什么?
答案 0 :(得分:3)
有一些问题:
首先,始终使用首字母大写字母命名您的类和结构。 arrivalScan
应为ArrivalScan
。这将有助于您区分类(或结构)和实例。
sendArrival
函数是一个实例函数。您正在尝试访问它,就好像它是一个类函数。创建JsonHelper类的实例,然后在该实例上调用该函数。
结构中的变量名称应以小写开头。
示例:
class JsonHelper {
struct ArrivalScan {
let toId: String
let userId: String
let gateId: String
let timestamp: String
}
func sendArrival(scan: ArrivalScan) {
//do something
}
}
let helper = JsonHelper()
let scan = JsonHelper.ArrivalScan(toId: "value", userId: "value", gateId: "value", timestamp: "value")
helper.sendArrival(scan: scan)
答案 1 :(得分:1)
你应该像下面这样调用这个方法,
JsonHelper().sendArrival(scan: scan)
由于sendArrival
不是static/class
方法,因此应该通过调用初始化程序来访问它,并且您还缺少参数名称scane:
答案 2 :(得分:1)
问题是你试图直接从类本身调用sendArrival
而不从中创建实例。所以你有两个选择来解决这个问题:
1 - 将static func sendArrival(scan: arrivalScan){
//do something
}
emthod声明为 static :
JsonHelper.sendArrival(scan: scan)
因此:
JsonHelper
2 - 从let scan = JsonHelper.arrivalScan.init(TOID:"D/0098/123456",UserId:"O0124553",GateId: "G/0098/536371",TimeStamp: "11/04/2018 11:51:00")
let jsonHelperObject = JsonHelper()
jsonHelperObject.sendArrival(scan: scan)
创建实例并使用它调用方法:
JsonHelper
选择其中一个解决方案取决于ArrivalScan
类的适当设计。
除了条形码:
作为命名约定,命名结构应遵循上面的驼峰大小写,这意味着arrivalScan
而不是sendArrival
。
调用sendArrival(scan: scan)
方法时,您必须提及标签:sendArrival(scan) // compile-time error
而不是func sendArrival(_ scan: arrivalScan)
。如果您想在不提及标签的情况下调用它,可以将其声明为sendArrival(scan)
,因此您可以将其称为scan
。
您可以将let scan = JsonHelper.arrivalScan(TOID:"D/0098/123456",UserId:"O0124553",GateId: "G/0098/536371",TimeStamp: "11/04/2018 11:51:00")
实例化为.init(...
,而无需{{1}}。
答案 3 :(得分:0)
您需要创建JsonHelper
类的实例才能调用sendArrival()
方法,从而解决错误:
let jsonHelper = JsonHelper()
jsonHelper.sendArrival(scan)
答案 4 :(得分:0)
或将sendArrival
标记为静态。