2017-02-05 5 views
-1

挨拶、独自のフォルダ内にあるカスタムクラスをインポートするにはどうすればいいですか?

私はウェブを見ていましたが、答えのどれも本当に私に必要なものを与えてくれませんでした。私はまだ非常に初心者であり、Javaのかなり単純なインポートルールに慣れています。私は逃げる。

私のファイル構造は次のとおりです: 私は自分のプロジェクトフォルダを持っています。私はCityData.swiftというファイルを含むモデルフォルダを持っています。このフォルダの外には、他のすべてのビューコントローラがXcodeの新しいプロジェクトレイアウトの標準としてprojectFolder内にあります。

私の問題は、私は次のようにタイプ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:コードサンプル:

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

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 

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

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

そして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

慣例として、クラスは大文字で始まる必要があります。アップルのスウィフトブックでイニシャライザのセクションを読んだことはありますか? (実際には本全体を読む)。質問を編集して初期設定を表示してください。 – Paulw11

+0

私はまだチャンスがありませんでした。私はRayWenderlichに従っており、私は彼のtableviewの例に似た何かをしようとしていました、pickerviewsだけで。しかし、cityData配列をviewDidLoadの外に宣言すると、上記のエラーがスローされ、viewdidload内にある場合は、非関数型[String]の値を呼び出すことはできません。本当に意味をなさないこれらのマイナーなエラーです。 – SomeStudent

+1

あなたのコードをもう少し見せてくれますか?ViewControllerをどのように設定しているかわかりますか? – Pierce

答えて

0

そしてcityDataクラスは問題がcityDataCityDataは、2つの異なる名前であるということです

どのように見えるかについて。あなたのクラスはCityDataと呼ばれる必要があり、正しく宣言する必要があります。

関連する問題