Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Swift 用setter初始化结构变量_Swift_Oop_Swift4 - Fatal编程技术网

Swift 用setter初始化结构变量

Swift 用setter初始化结构变量,swift,oop,swift4,Swift,Oop,Swift4,我是Swift新手,我希望能够编写一个属性设置器,在初始化时它也将用作构造函数: struct Person { private var name: String { get { return self.name; } set { self.name = name; } } } var Murad = Person(name: "Murad"); 当我运行此代码时,

我是Swift新手,我希望能够编写一个属性设置器,在初始化时它也将用作构造函数:

struct Person {
    private var name: String {
        get {
            return self.name;
        }
        set {
            self.name = name;
        }
    }
}

var Murad = Person(name: "Murad");
当我运行此代码时,返回此错误

传递给不带参数的调用的参数


发生此错误的原因是该属性是一个计算属性,并且是私有的(只能在类中更改),因此对于编译器,没有(memberwise)初始值设定项,只能使用没有参数的默认初始值设定项
Person()

幸运的是,当您运行代码时,您将进入一个无限循环(这会导致溢出崩溃),否则会收到此错误消息

如果需要常量,只需将结构成员声明为
let

struct Person {
    let name: String
}

let murad = Person(name: "Murad")
print(murad)

发生此错误的原因是该属性是一个计算属性,并且是私有的(只能在类中更改),因此对于编译器,没有(memberwise)初始值设定项,只能使用没有参数的默认初始值设定项
Person()

幸运的是,当您运行代码时,您将进入一个无限循环(这会导致溢出崩溃),否则会收到此错误消息

如果需要常量,只需将结构成员声明为
let

struct Person {
    let name: String
}

let murad = Person(name: "Murad")
print(murad)

为什么要创建无限循环?如果添加initalizer my struct,这也是返回错误。
self.name=name
调用setter的setter调用setter的setter调用setter的setter调用setter的setter调用setter的setter调用setter的setter…为什么要创建无限循环?如果添加initalizer my struct,这也是返回错误。
self.name=name
调用setter的setter调用调用setter的setter调用setter的setter调用调用setter的setter的setter…