如何导入自己文件夹中的自定义类?

时间:2017-02-05 19:45:31

标签: ios swift

致敬,

所以我在环顾网络,没有一个答案真的给了我我需要的东西,我仍然是一个快速的新手,因此我习惯了java的相当简单的导入规则。我离题了。

所以我的文件结构如下: 我有我的项目文件夹,其中有一个模型文件夹,其中包含一个名为CityData.swift的文件。在此文件夹之外,我的所有其他视图控制器都位于projectFolder中,这是Xcode新项目布局的标准。

我的问题是我想创建一个CityData类型的数组,如下所示:

var data:[CityData] = [CityData(cityName:"Moscow", cityHighLight:"Capital of Russia")].

但是,我收到一个错误,说使用未声明的类型。我如何声明这种类型,我也在我的数组中正确调用构造函数。据我所知,init()就是你如何构建一个构造函数,而swift没有" new"的概念。

编辑:想通了,不需要导入,只是意外地大写我的c是cityData。现在我收到cannot use instance member 'cityData' within properly initalizer; property initializer run before self is available.

的新错误

这意味着什么,以及如何在cityData数组中调用我的构造函数呢?

编辑2:代码示例:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    @IBOutler wear var cityPicker :UIPickerView!; 
    var data = [cityData]();

    override func viewDidLoad() {
         data = [cityData(cityName: "Moscow", cityHighLight:"Russian Capital")
    }

关于cityData类的外观:

cityData {
   var cityName:String;
   var cityHighLight:String;

   init(cityName:String, cityHighLight:String) {
      self.cityName = cityName;
      self.cityHighLight = cityHighLight;
   }

   //getter methods below since swifts get/set within a variable make 0 sense.

}

编辑:3

VC:

import UIKit


class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{


    var lat:Double = 0.0;
    var long:Double = 0.0;

    @IBOutlet weak var cityPicker: UIPickerView!;
    @IBOutlet weak var dataFromPicker: UILabel!;


    var data = [cityData]();
    var cityData:[String] = ["Waycross", "Plains", "Athens", "Milledgeville", "Wrightsville"];
    var cityHighlights:[String] = ["Alligators", "Peanuts", "Heaven on Earth", "Mental Hospital", "Home of Herschel"];



    //number of columns
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1;
    }

    //number of rows
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return cityData.count;
    }

    //title for row
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

        dataFromPicker.text = cityHighlights[row];
        return cityData[row];

    }

    override func viewDidLoad() {

        data = [
            cityData(cityName:"Moscow", cityHighLight:"Russians", cityLat: 200.0, cityLong:200.0)
        ];


        super.viewDidLoad()
        dataFromPicker.textAlignment = .center;
        self.cityPicker.dataSource = self;
        self.cityPicker.delegate = self;
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

cityData.swift:

导入基金会

class cityData {
    var cityName:String;
    var cityHighLight:String;
    var cityLat:Double;
    var cityLong:Double;

    init(cityName: String, cityHighLight:String, cityLat:Double, cityLong:Double) {
        self.cityName = cityName;
        self.cityHighLight = cityHighLight;
        self.cityLat = cityLat;
        self.cityLong = cityLong;
    }
}

1 个答案:

答案 0 :(得分:0)

  

以及cityData类的外观如何

问题在于cityDataCityData是两个不同的名称。您的类需要被调用CityData,并且需要正确声明它。