gpt4 book ai didi

ios - 在 Swift 中初始化 UITableViewCells 的最佳实践

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

swift 新手。我有一个名为 "MyTableViewCell" 的自定义 UITableViewCell 代码如下:

let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! MyTableViewCell

我应该在这里使用 as! 还是 as? 来向下转换?我在某处读到强制向下转换不是好的做法,尽管我看到很多人在其他代码示例中使用它。

我也知道 Swift 会自动推断类型,但最好将其包含在声明中,即:

let cell: MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as! MyTableViewCell

关于此的任何指示都会很棒。谢谢!

最佳答案

关于强制向下转型/展开是不好的做法,你是对的,但是在这种情况下,这并不是一件坏事。

您可以在 Storyboard中或通过 registerClass:forCellReuseIdentifier: 显式地将单元格标识符 myCell 注册为 MyTableViewCell 类的实例。

这意味着在构建时,您确切地知道当您向 tableView 请求一个标识符为 myCell 的单元格时,您将返回一个 MyTableViewCell细胞。如果你确实犯了一个错误(可能是打字错误),那么你的应用程序最多在你第一次测试时就会崩溃。您在调试时会发现的东西不太可能成为生产中的问题。

很明显,编译器并不知道这一点,因此您必须将其隐藏起来,但这并不值得担心。


如果您不能至少 99.9% 确定强制向下转型/解包不会导致您的应用程序崩溃,则不适合强制向下转型。例如,也许您正在从 Web 服务返回的字典中提取字符串 let string = dictionary["myString"] as!字符串。在很多情况下,键 myString 可能不包含 Swift 字符串(即 JSON 解析器返回 NSNull,它们的键根本不存在,或者它不是一个String),所以你应该始终确保以安全的方式解包值。

这个故事的寓意是,您应该尽可能避免强制向下转换/展开,但也有一些异常(exception),这就是其中之一。


though I see many people using it in other code examples.

你是对的,你看到很多人在 SO 上提供了写得非常糟糕的 Swift 片段,很多其他人会简单地认为它没问题,所以你质疑它是件好事。

关于ios - 在 Swift 中初始化 UITableViewCells 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34383679/

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