2017-07-12 2 views
0

メインビューコントローラ(func getCityWeatherData)の関数を、特定の条件下で設定された項目のみを表示する下のクラスに拡張しようとしています。Swift3:条件付きセルのメインVCからTableVCにfuncデータを呼び出します

私はまた、いくつかの基準が選択されているサンプルデータをマークしました。それらを通常のアレイからどのように分離するのですか?私はnumberOfRowsAtセクションのどこかで読んだことを試しましたが、私は混乱しています。

class ProductRecsTableViewController: UITableViewController { 

//Mark: Properties 

var products = [Product]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

// MARK: - Table view data source 

override func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if getCityWeatherData.humidity < 50 { 
     return productsHumidity.count 
    } else { 
    return products.count 
    } } 

これは、私が作成したサンプルセルである - 私が欲しい「天気:...」が、項目が示す場合に定義します。

guard let prod1 = Product(name: "XXX", photo: photo1, rating: 1, weather: "Humidity") 
+0

それは混乱だ、詳細に問題を説明してください、あなたの内側myProductsRectsTableViewController.delegate = selfを言う必要がある。この過程の中でいくつかの点では、再び – D4ttatraya

+0

D4ttatraya @私はからのデータを持っています気象APIを 'ViewController'に追加しましたが、' ProductRecsTableViewController'でもアクセスする必要があります。どうすればいいですか? –

+0

@ J.M。天気APIへのアクセスを独自のModelオブジェクトに分離することを検討する必要があります。実際にそこにAPIデータにアクセスすることを重くすると、 'let weatherApi = WeatherApi()、currentWeather = weatherApi.getWeather()'のようにすることができます。コントローラは、モデルからデータを取得し、それをビューに渡す必要があります。しかし、多くのコントローラが単一のモデルを共有することがあります。これは、現在の2つのビューコントローラ間で関数を再利用しようとする際の問題に役立ちます。 –

答えて

0

あなたは二つのコントローラ間の関係のいくつかのタイプを持っていない限り、あなたが行うことはできませんあなたのProductRecsTableViewControllerクラスからgetCityWeatherData呼び出された関数にアクセスしようとしているように聞こえます。あなたはProductRecsTableViewControllerに必要な情報を返す単一の機能を持つProductRecsTableViewControllerDelegate: AnyObjectというプロトコルを作ることができます。どちらの方法でも、デリゲートまたはプロパティを使用して2つのコントローラ間でデータ/情報を渡すだけでよいように思えます。

UPDATE:#2

class CustomViewController: UIViewController, CustomDelegate { 
    func askForData() -> Data { 
     return _whateverDataYouWant 
    } 
} 

protocol CustomDelegate: AnyObject { 
    func askForData() -> Data 
} 

class ProductRecsTableViewController: UITableViewController { 
    weak var delegate: CustomDelegate? 

    func myMethodThatNeedsAccessToData() { 
     let data = delegate?.askForData() 
     doStuffWith(data) 
    } 

} 

あなたはViewController

+0

委任やプロトコルの使用について読んでいましたが、なんらかの理由で苦労しました。 –

+0

上記の私の更新を確認してください〜 – cloudcal

+1

ありがとう、これはプロトコルプロセスをもう少し説明するのに役立ちます。 –

関連する問題