2017-02-09 48 views
0

我在swift上學習,我不得不爲這個senario編寫代碼,我不知道爲什麼我的函數不工作。我變得非常惱火。Swift類和函數

//: 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() 


} 
+0

爲什麼它不起作用?它是否會崩潰,或將您的計算機着火? –

+0

我的populationAfter()函數不會工作。 – casey

+1

你需要更具體。你期望從你的功能中得到什麼,你會得到什麼? –

回答

0

您需要將您的狀態var S和類定義後,打電話給Texas.populationAfter()State具有稱爲Texas,Oklahoma等的屬性沒有意義,但這是您的代碼正在執行的操作。在代碼中調用Texas.populationAfter()是完全非法的,因爲代碼需要位於函數聲明中。

通過移動狀態的創建State類以外,你再使用State類定義創建變量,然後你可以調用名爲TexasState實例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() 
+0

OHHHH所以它關於程序中的安置順序!非常感謝! – casey

+1

不_sequence_但_containment_。大括號有意義。在他們內部與在他們之外是非常不同的。 – matt

+0

問題是函數調用是在類聲明塊內部的,並且在聲明塊中只能聲明內容,所以不能執行任何操作。 – EmilioPelaez