所以我在环顾网络,没有一个答案真的给了我我需要的东西,我仍然是一个快速的新手,因此我习惯了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 :(得分:0)
以及cityData类的外观如何
问题在于cityData
和CityData
是两个不同的名称。您的类需要被调用CityData
,并且需要正确声明它。