Swift类和函数
我正在学习一门关于swift的课程,我必须为这个senario编写一个代码,我不知道为什么我的函数不起作用。我非常恼火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
//: 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>将导致崩溃。