我有一个定义shoppingList的结构。
struct ShoppingList {
var shoppingListId :NSNumber
var title :String
}
let shoppingList = ShoppingList(shoppingListId: NSNumber, title: String) // I don't want to assign shoppingListId
现在,问题是它会自动生成构造函数,该构造函数将shoppingListId作为参数。由于shoppingListId是一个身份或唯一密钥,我不想传入构造函数。将shoppingList插入数据库后,ShoppingListService将稍后设置它。
这是一个比结构更有意义的地方吗?
更新:
struct ShoppingList {
var shoppingListId :NSNumber
var title :String
init(title :String) {
self.title = title
// but now I have to assign the shoppingListId here unless I make it NSNumber? nullable
}
}
let shoppingList = ShoppingList(title: "Hello World")
更新3:
let shoppingList = ShoppingList()
// THE FOLLOWING CODE WILL NOT WORK SINCE IT REQUIRES THE shoppingList to // BE var instead of let
shoppingList.shoppingListId = NSNumber(int: results.intForColumn("shoppingListId"))
shoppingList.title = results.stringForColumn("title")
shoppingLists.append(shoppingList)
答案 0 :(得分:2)
如果您不想要默认构造函数,那么请创建一个自己的构造函数。但是,请务必记住,除非您的属性是可选的,否则必须将其初始化为某个值。在这种情况下,您必须为shoppingListId提供一个值,或者您需要将其设为Optional。另外,我没有看到为什么一个类比这个场景的结构更好的原因。
struct ShoppingList {
var shoppingListId: NSNumber
var title: String
init(title: String) {
self.title = title
shoppingListId = NSNumber(integer: 0)
}
}
let newList = ShoppingList(title: "Groceries")
<强>更新强> 刚看到你更新了你的问题。如果您无法为shoppingListId选择合理的初始值,请将其设为可选,如下所示:
struct ShoppingList {
var shoppingListId: NSNumber?
var title: String
init(title: String) {
self.title = title
}
}
let newList = ShoppingList(title: "Groceries")
只要实现shoppingListId将为零,直到你将它设置为某个东西,并且在你使用它的任何地方,你应该将值绑定在if中。