Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC
Posted
技术标签:
【中文标题】Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC【英文标题】:Swift3: Call func data from main VC to TableVC for conditional cells 【发布时间】:2017-07-12 18:44:50 【问题描述】:我正在尝试将我的主视图控制器 (func getCityWeatherData
) 中的一个函数扩展到下面的类,该类仅在某些条件下显示设置项。
我还标记了需要选择一些标准的示例数据 - 我如何将它们与通常的数组分开?我试过我在其他地方读到的东西,在 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")
【问题讨论】:
比较混乱,请再详细说明问题 @D4ttatraya 我在ViewController
中有来自天气API 的数据,但我还需要在ProductRecsTableViewController
中访问它。我该怎么做
@J.M.您应该考虑将对天气 API 的访问分离到它自己的模型对象中。如果您将实际访问 API 数据的所有繁重工作都放在了那里,那么您可以执行let weatherApi = WeatherApi(), let currentWeather = weatherApi.getWeather()
之类的操作。您的控制器应该负责从模型中获取数据并将其提供给视图。但是,许多控制器可能共享一个模型,这将帮助您解决当前尝试跨两个视图控制器重用函数的问题。
@JoshuaBreeden 谢谢,我还没有听说过。我现在看看。好像可以减轻我的负担。
@J.M.如果您刚刚开始,我会向您推荐 Apple 的免费电子书“App Development with Swift”。它不仅介绍了 Swift 语言的语法,还介绍了一些推荐的设计模式,这些模式将帮助您合理地布局您的应用程序。我正在谈论的这个特殊概念称为模型视图控制器或 MVC。
【参考方案1】:
听起来您正试图从您的 ProductRecsTableViewController
类中访问一个名为 getCityWeatherData
的函数,除非您在两个控制器之间存在某种类型的关系,否则您不能这样做。您可以创建一个名为ProductRecsTableViewControllerDelegate: AnyObject
的协议,该协议具有一个函数,可以将您需要的信息返回给您的ProductRecsTableViewController
。无论哪种方式,听起来您只需要通过委托或属性在两个控制器之间传递数据/信息。
更新:#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
中输入 myProductsRectsTableViewController.delegate = self
【讨论】:
我正在阅读有关使用委托或协议的内容,但由于某种原因很难理解。我会检查你给的delegate: anyObject
谢谢,这有助于更多地解释协议过程。以上是关于Swift3:为条件单元格从主 VC 调用 func 数据到 TableVC的主要内容,如果未能解决你的问题,请参考以下文章