如何在Swift 4.2中初始化结构

时间:2018-12-27 23:32:50

标签: swift struct

我想要什么: 在使用之前初始化结构。但是,即使经过大量尝试和搜索,我还是真的不知道如何。

结构示例:

struct Person: Decodable {
    let name: String
    let age: Int
}

我想在脚本中全局使用此结构。我认为应该是这样的(但是由于第3行,它不起作用):

import UIKit
class ViewController: UIViewController {
    let personExample: Person()

    func configure(person: Person) {
        self.personExample = person
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print(self.personExample)
    }
}

2 个答案:

答案 0 :(得分:3)

这里的语法完全不正确:

let personExample: Person()

这是什么意思

let personExample: Person

Person()是调用init()的结果,它是一个值,而不是类型,并且对于该类型而言,它也不是有效的初始化器。 Person是类型,这就是您想要的声明。

但是,您在此处编写的内容与描述不太吻合。如果要“全局”,则实际上是一个实例变量。您可能在这里的意思是:

var personExample = Person(name: "Bob", age: 21)

这将为该值分配personExample(并通过类型推断将类型分配给Person)。我在这里使用var是因为configure(person:)试图对其进行修改。

使用情节提要板时,您也可能对视图控制器中实例变量的初始化感到困惑。如果是您的问题(例如,您看到在初始化过程中未设置personExample的错误),则需要进一步说明您的情况,我们将为您提供帮助。

答案 1 :(得分:-1)

您需要

winners = ["Wane", "Trevor", "Franklin", "Martoz"]
winner = random.choice(winners)
winners.remove(winner)
winners.append("Michael")
print(winners)

首先,此If isarray(myarr) then for i = ubound(myarr,1) to lbound(myarr,1) step -1 for j = ubound(myarr,2) to lbound (myarr,2) step -1 if myarr(i,j) <> 0 then K=k+1 Mysum = mysum + myarr(I,j) Endif Next j Next i Else ‘ single value mysum =myarr(I,j) Endif 是不正确的语法,如果您更改为

 var personExample: Person?

func configure(person: Person) {
    self.personExample = person
}

它将引发错误,因为必须在vc init方法中将其初始化,如果您未实现编码,请删除let personExample: Person()