gpt4 book ai didi

ios - 快速将字符串内容转换为 UITableViewCell 类型

转载 作者:搜寻专家 更新时间:2023-11-01 06:33:49 28 4
gpt4 key购买 nike

能否通过特定函数将 Swift 3 String 的内容转换为类型?我将包括一个示例:

我已经声明了多个 UITableViewCell 类,如下所示:

class ScrollFeedCell : UITableViewCell {...}
class AdCell : UITableViewCell {...}
class MovieCell : UITableViewCell {...}

我想在我的 View Controller 中声明转换函数,如下所示:

func convert(String) -> Any {}

然后我想使用以下内容:

class TableView : UITableViewController {
let typeArray = [String]

override func viewDidLoad() {
//add a huge ton of strings into the typeArray
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = UITableViewCell()
let c = typeArray[indexPath.section]

if c == "ScrollFeddCell" || c == "AdCell" || c == "MovieCell" {
cell = tableView.dequeueReusableCell(withIdentifier: content[indexPath.section], for: indexPath) as! convert(c)
} else {
cell = tableView.dequeueReusableCell(withIdentifier: "CategoryScrollFeed_Cell", for: indexPath)
}

return cell
}
}

最佳答案

我认为这是不可能的。即使它在某种程度上是可能的,我认为它会涉及很多肮脏的把戏,在这种情况下这并不值得。

事实上,您使用想象中的 convert 方法的唯一地方是这里:

cell = tableView.dequeueReusableCell(withIdentifier:       
content[indexPath.section], for: indexPath) as! convert(c)
^^^^^^^^^^

为什么要将其转换为正确的类型?由于这是非常动态的,编译器无法知道 convert 返回的类型有哪些成员。基本上,太动态了。在此处将其转换为正确的类型没有用。

封闭方法无论如何都会返回一个 UITableViewCell,因此您可以只返回 dequeueResuableCell 的返回值,而不会引起编译器的提示。

“但是我想在单元格出队后对其进行配置……”您可能会说。

那么,您将以不同于 MovieCell 的方式配置 ScrollFeedCell,对吧?所以你不能把所有的配置代码都写在这一行之后:

cell = tableView.dequeueReusableCell(withIdentifier:       
content[indexPath.section], for: indexPath) as! convert(c)

您仍然需要编写 if 语句并检查单元格是否为 MovieCellScrollFeedCellAdCell。那么为什么不删除上面的行并改为这样做:

if c == "ScrollFeedCell" {
let scrollFeedCell = tableView.dequeueReusableCell(withIdentifier:
content[indexPath.section], for: indexPath) as! ScrollFeedCell
// configure cell here
cell = scrollFeedCell
} else if c == "AdCell" {
let adCell = tableView.dequeueReusableCell(withIdentifier:
content[indexPath.section], for: indexPath) as! AdCell
// configure cell here
cell = adCell
} else if c == "MovieCell" {
let movieCell = tableView.dequeueReusableCell(withIdentifier:
content[indexPath.section], for: indexPath) as! MovieCell
// configure cell here
cell = movieCell
} else {
cell = tableView.dequeueReusableCell(withIdentifier: "CategoryScrollFeed_Cell", for: indexPath)
}

编辑:

试试这个:

if c == "ScrollFeedCell" {
let scrollFeedCell = tableView.dequeueReusableCell(withIdentifier:
content[indexPath.section], for: indexPath) as! ScrollFeedCell
scrollFeedCell.delegate = self
cell = scrollFeedCell
} else if c == "AdCell" || c == "MovieCell" { // add your other cell types here.
cell = tableView.dequeueReusableCell(withIdentifier:
content[indexPath.section], for: indexPath)
} else {
cell = tableView.dequeueReusableCell(withIdentifier: "CategoryScrollFeed_Cell", for: indexPath)
}

关于ios - 快速将字符串内容转换为 UITableViewCell 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44062179/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com