ios – 如何根据Swift中的String创建对象?

ios – 如何根据Swift中的String创建对象?,第1张

概述这是我想要重构的代码: let myCell = MyCustomTableViewCell()self.createCell(myCell, reuseIdentifierString: "myCellIdentifier") MyCustomTableViewCell符合SetCell协议,因此工作正常.并且SetCell协议不是@obj_c协议.这是一个迅速的协议 private func 这是我想要重构的代码:

let myCell = MyCustomtableVIEwCell()self.createCell(myCell,reuseIDentifIErString: "myCellIDentifIEr")

MyCustomtableVIEwCell符合SetCell协议,因此工作正常.并且SetCell协议不是@obj_c协议.这是一个迅速的协议

private func createCell<T where T:SetCell>(classtype: T,reuseIDentifIErString: String) -> UItableVIEwCell {  var cell = _tableVIEw.dequeueReusableCellWithIDentifIEr(reuseIDentifIErString) as T  cell.setText()  return cell.getCustomCell()}

现在我重构我的代码,我想根据字符串创建myCell,但字符串与我的类名完全相同.我不想使用else-if或switch-case

let myCell: AnyClass! = NSClassFromString("MyCustomtableVIEwCell")self.createCell(myCell,reuseIDentifIErString: "myCellIDentifIEr")

但现在,AnyClass的myCell不符合协议.
我怎样才能做到这一点?

解决方法@H_404_31@ 你需要更多的代码.您将获得AnyClass而不是AnyObject.因此,您需要创建该类型的实例.你可以试试这个:

let cellClass: AnyClass! = NSClassFromString("MyCell")var objectType : NSObject.Type! = cellClass as NSObject.Type!var theObject: NSObject! = objectType() as NSObjectvar myCell:MyCell = theObject as MyCell

为了让它符合您的协议,您可以尝试以下几点:

1.您可以为符合协议的所有单元格创建基类.并在上面的代码中使用它而不是UItableVIEwCell.为此你可以使用这样的代码:

protocol SetCell {    func setcell() {}}class BaseUItableVIEwCell : UItableVIEwCell,SetCell {    func setcell() {}}class MyCell : BaseUItableVIEwCell {    overrIDe func setcell() {}}let cellClass: AnyClass! = NSClassFromString("MyCell")var objectType : NSObject.Type! = cellClass as NSObject.Type!var theObject: NSObject! = objectType() as NSObjectvar myCell:BaseUItableVIEwCell = theObject as BaseUItableVIEwCell

2.您可以使用扩展名扩展UItableVIEwCell,例如添加空扩展名

extension UItableVIEwCell: SetCell {}

//编译时错误:

Declarations from extensions cannot be overrIDden yet

//埃德温:很奇怪,这是在文档中.看起来好像这个……

你可以定义一个符合这样协议的变量:

@objc protocol SetCell {    func setcell() {}}let cellClass: AnyClass! = NSClassFromString("MyCell")var objectType : NSObject.Type! = cellClass as NSObject.Type!var myCell2:protocol<SetCell> = objectType() as protocol<SetCell>
总结

以上是内存溢出为你收集整理的ios – 如何根据Swift中的String创建对象?全部内容,希望文章能够帮你解决ios – 如何根据Swift中的String创建对象?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1060678.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存