Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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类和函数_Swift - Fatal编程技术网

Swift类和函数

Swift类和函数,swift,Swift,我正在学习一门关于swift的课程,我必须为这个senario编写一个代码,我不知道为什么我的函数不起作用。我非常恼火 //: Playground - noun: a place where people can play import Cocoa // create class class State { var population: Double? var capital: String? var name: String? var growthRa

我正在学习一门关于swift的课程,我必须为这个senario编写一个代码,我不知道为什么我的函数不起作用。我非常恼火

//: Playground - noun: a place where people can play

import Cocoa

// create class

class State
{
    var population: Double?
    var capital: String?
    var name: String?
    var growthRate: Double?
    var nextYearPopulation: Double?
    var neighbors: [State]


// initialize vars
    init(population: Double?, capital: String?, name: String?, growthRate: Double?, neighbors: [State])
    {
        self.population = population
        self.capital = capital
        self.name = name
        self.growthRate = growthRate
        self.neighbors = neighbors
    }

    var Texas = State(population: 1000000, capital: "Austin", name: "Texas", growthRate: 0.012, neighbors: [])

    var Oklahoma = State(population: 3000000, capital: "Oklahoma City", name: "Oklahoma", growthRate: 0.01, neighbors: [])

    var NewMexico = State(population: 1000000, capital: "Santa Fe", name: "New Mexico", growthRate: 0.02, neighbors: [])

    var NewYork = State(population: 25000000, capital: "New York City", name: "New York", growthRate: 0.1, neighbors: [])

    var Virginia = State(population: 15000000, capital: "Richmond", name: "Virginia", growthRate: 0.03, neighbors: [])

    var Florida = State(population: 20000000, capital: "Tallahassee", name: "Florida", growthRate: 0.07, neighbors: [])

    //functions

    func populationAfter()
    {
        nextYearPopulation = self.growthRate! * self.population!
        print("The projected population for ", self.name, "is ", nextYearPopulation)
    }

    Texas.populationAfter()


}

您需要将state
var
s和调用
Texas.populationAfter()
移动到类定义之后。对于
来说,拥有名为
德克萨斯州
俄克拉荷马州
等的属性是没有意义的,但这就是您的代码所做的。在代码中调用
Texas.populationAfter()
是完全非法的,因为代码需要在函数声明中

通过将状态的创建移动到
状态
类之外,然后使用
状态
类定义创建变量,然后可以在名为
德克萨斯州
状态
实例上调用
populationAfter()
方法

注意,在Swift中,建议对变量和属性使用以小写字母开头的字符串,对类和结构类型使用以大写字母开头的字符串

请注意,
populationAfter
函数只是计算人口增长。要获得新的更新人口,请乘以
1+self.growthRate取而代之

class State
{
    var population: Double?
    var capital: String?
    var name: String?
    var growthRate: Double?
    var nextYearPopulation: Double?
    var neighbors: [State]

    // initialize vars
    init(population: Double?, capital: String?, name: String?, growthRate: Double?, neighbors: [State])
    {
        self.population = population
        self.capital = capital
        self.name = name
        self.growthRate = growthRate
        self.neighbors = neighbors
    }

    //functions

    func populationAfter()
    {
        nextYearPopulation = (1 + self.growthRate!) * self.population!
        print("The projected population for ", self.name!, "is ", nextYearPopulation!)
    }
}

var Texas = State(population: 1000000, capital: "Austin", name: "Texas", growthRate: 0.012, neighbors: [])

var Oklahoma = State(population: 3000000, capital: "Oklahoma City", name: "Oklahoma", growthRate: 0.01, neighbors: [])

var NewMexico = State(population: 1000000, capital: "Santa Fe", name: "New Mexico", growthRate: 0.02, neighbors: [])

var NewYork = State(population: 25000000, capital: "New York City", name: "New York", growthRate: 0.1, neighbors: [])

var Virginia = State(population: 15000000, capital: "Richmond", name: "Virginia", growthRate: 0.03, neighbors: [])

var Florida = State(population: 20000000, capital: "Tallahassee", name: "Florida", growthRate: 0.07, neighbors: [])

Texas.populationAfter()

为什么它不起作用?它会崩溃吗?或者可能会让你的计算机着火?我的populationAfter()函数不起作用。你需要更具体一些。你期望从函数中得到什么?你得到了什么?什么都没有发生。它应该计算并打印预期的填充。您应该将您的州和调用移动到
Texas.populationAfter()
类定义之外。OHHHH所以这是关于程序中的放置顺序!非常感谢你!不是顺序而是包容。花括号是有意义的。在它们内部与在它们外部非常不同。问题是函数调用在类声明块内部,而在声明块中只能声明内容,不能执行任何操作。我还要补充一点,您不需要在类声明外部声明变量,你可以把它们放在那里,但你必须这样称呼它们
State.Texas
,除非一个州没有大写字母、名称或增长率是有效的,否则我建议你避免在这里使用可选变量。它们只是让事情复杂化,因为你必须把它们拆开。使用强制展开
nil
时,code>将导致崩溃。