Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 成员初始值设定项如何在结构中工作?(以Swift格式)_Ios_Xcode_Swift_Cs193p_Member Initialization - Fatal编程技术网

Ios 成员初始值设定项如何在结构中工作?(以Swift格式)

Ios 成员初始值设定项如何在结构中工作?(以Swift格式),ios,xcode,swift,cs193p,member-initialization,Ios,Xcode,Swift,Cs193p,Member Initialization,因为我是一个完全的初学者,我甚至不知道我问的问题是否正确。但是我很难理解为什么for循环中的“用户(名称:“John…”部分代码有效 CASE1 struct User { let name: String let company: String let login: String let password: String static let database: Dictionary<String, User> = { v

因为我是一个完全的初学者,我甚至不知道我问的问题是否正确。但是我很难理解为什么for循环中的“用户(名称:“John…”部分代码有效

    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()
}

    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()
为了理解CASE1是如何工作的,我运行了一个更简单的代码版本,即CASE2。尽管在这两种情况下发生了完全相同的事情,[关于用户(…参数]),我在第二种情况下得到了错误“声明预期”。 Paul爵士(斯坦福cs193p)说这是一个相当简单的数据库,但我已经花了6个多小时试图解决这个问题。

这非常简单。
    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()
[collection]中的使您能够对数组、字典或其他集合进行迭代。在案例1中,您可以创建用户数组:

    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()
[
User(), User()
]
但在第二种情况下,你没有。
此语法:[User(),User(),User()]创建数组。

for循环必须包含在闭包中

    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()
在案例1中,您使用闭包声明一个名为
database
的静态属性。以下是声明:

    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()
static let database: Dictionary<String, User> = {
    // This is the body of the closure
}()
如您所见,我添加了
数据库的声明和闭包,并在用户周围添加了
[]

    CASE1
 struct User
 {
    let name: String
    let company: String
    let login: String
    let password: String



 static let database: Dictionary<String, User> = {
    var theDatabase = Dictionary<String, User>()
    for user in [
        User(name: "John Appleseed", company: "Apple", login: "japple", password: "foo"),
        User(name: "Madison Bumgarner", company: "World Champion San Francisco Giants", login: "madbum", password: "foo"),
        User(name: "John Hennessy", company: "Stanford", login: "hennessy", password: "foo"),
        User(name: "Bad Guy", company: "Criminals, Inc.", login: "baddie", password: "foo")
    ] {
        theDatabase[user.login] = user
    }
    return theDatabase
}()