Swift结构身份

时间:2015-11-20 17:29:34

标签: swift

我有一个定义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)

1 个答案:

答案 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中。