2017-02-05 56 views
-1

Saluteations,如何导入自己的文件夹内的自定义类?

所以我在网上寻找,没有答案真的给了我需要的东西,我仍然是一个新手,我很习惯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; 
    } 
} 
+0

按照惯例,你的班级应该以大写字母开头。您是否阅读过苹果Swift Book初始化程序部分? (实际上读了全书)。请编辑您的问题以显示初始化程序。 – Paulw11

+0

我还没有机会呢。我跟随RayWenderlich,我试图做一些类似于他的tableview示例,只与pickerviews。但是,如果我在viewDidLoad之外声明我的cityData数组,它会抛出我上面提到的错误,如果在viewdidload中,那么它抛出无法调用非函数类型[String]的值。呃..这些小错误确实没有意义。 – SomeStudent

+1

你能告诉我们更多的代码吗,所以我们可以看到你是如何设置你的ViewController的? – Pierce

回答

0

而对于cityData类的样子

的问题是,cityDataCityData是两个不同的名字。你的课程需要被称为CityData,并且需要正确申报。

相关问题