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;
}
}
按照惯例,你的班级应该以大写字母开头。您是否阅读过苹果Swift Book初始化程序部分? (实际上读了全书)。请编辑您的问题以显示初始化程序。 – Paulw11
我还没有机会呢。我跟随RayWenderlich,我试图做一些类似于他的tableview示例,只与pickerviews。但是,如果我在viewDidLoad之外声明我的cityData数组,它会抛出我上面提到的错误,如果在viewdidload中,那么它抛出无法调用非函数类型[String]的值。呃..这些小错误确实没有意义。 – SomeStudent
你能告诉我们更多的代码吗,所以我们可以看到你是如何设置你的ViewController的? – Pierce