是否有一些速记语法可以让我添加一个对象,并将其属性设置为数组。这就是我目前正在做的事情,但是我想将这些对象全部附加到一个 append 语句中。
我尝试了各种语法,使用self()
但我没有太多运气。
var selectFields = [iCloudSchemaFieldValue]()
let tid = iCloudSchemaFieldValue()
tid.setField(LoggerStartup.eTblTypes.tid)
selectFields.append(tid)
let name = iCloudSchemaFieldValue()
name.setField(LoggerStartup.eTblTypes.name)
selectFields.append(name)
这是我的枚举
public enum eTblTypes
{
public static let tid = 2010
public static let name = 2020
//
}
这是我的目标C框架类。
@interface iCloudSchemaFieldValue : NSObject
@property (nonatomic) NSInteger enumVal;
@property (nonatomic) NSInteger tableEnumVal;
@property (nonatomic) id value;
@property (nonatomic) BOOL sysGenDefault;
@property (nonatomic) eOperator whereOperator;
@property (nonatomic) eOperator whereCondition;
@property (nonatomic) NSInteger padAmount;
-(id)setField: (NSInteger)ev;
-(id)setFieldVal: (NSInteger)ev
value: (id)value;
-(id)setFieldWithPadding: (NSInteger)ev
padding: (NSInteger)padding;
-(id)setFieldSysGenVal: (NSInteger)ev;
-(id)setWhereVal: (NSInteger)ev
table: (NSInteger)tableEv
operator: (eOperator)op
value: (id)value
condition: (eOperator)condition;
@end
我真的不想向这个类添加一个 init 方法,我有几个帮助程序方法,我想使用相同的简写语法方法。
这是否更好,但你可以做这样的事情:
let selectFields: [iCloudSchemaFieldValue] = [
LoggerStartup.eTblTypes.tid,
LoggerStartup.eTblTypes.name,
... // add other fields you want to set here
].map {
let obj = iCloudSchemaFieldValue()
obj.setField($0)
return obj
}
我假设LoggerStartup.eTblTypes.tid
和LoggerStartup.eTblTypes.name
Int
属于同一类型,并且iCloudSchemaFieldValue
是一种类型。
现在,每次要设置新字段时,您只需要再添加一行,而不是 3 行。
最好是可以编辑iCloudSchemaFieldValue
以添加需要Int
的初始化器。然后你可以做:
let selectFields = [
LoggerStartup.eTblTypes.tid,
LoggerStartup.eTblTypes.name,
... // add other fields you want to set here
].map(iCloudSchemaFieldValue.init)
在 iCloudSchemaFieldValue
结构或类中添加一个初始值设定项,该初始值设定项采用LoggerStartup.eTblTypes
类型并在 init 方法中设置适当的属性
init(field: LoggerStartup.eTblTypes)
然后你可以写
var selectFields = [iCloudSchemaFieldValue]()
selectFields = [iCloudSchemaFieldValue(field: .tid),
iCloudSchemaFieldValue(field: .name)]
为此,您可以添加更新对象并返回自身的方法。我们称之为updating
.
extension iCloudSchemaFieldValue {
func updating(with closure: (iCloudSchemaFieldValue) -> Void) -> iCloudSchemaFieldValue {
closure(self)
return self
}
}
因此,您的代码将如下所示:
let selectFields = [
iCloudSchemaFieldValue().updating(with: { $0.setField(LoggerStartup.eTblTypes.tid) }),
iCloudSchemaFieldValue().updating(with: { $0.setField(LoggerStartup.eTblTypes.name) })
]
我想将这些对象全部附加到一个附加语句中。
你可以这样做:
selectFields = [tid, name]
但是由于您的数据源selectFields
已经初始化,因此这很好:
selectFields.insert(contentsOf: [tid, name], at: 0)