• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 当已知对象符合协议(protocol)时,断言对象包含某些方法是一种好的模式吗?

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:55:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

出于我项目 UI 的目的,我正在 UIViewController 上的一个类别中创建一个通用方法,该方法为导航项设置 UI。这个特定的导航项有一个对应于操作(保存、确定、选择等)的黄色按钮和一个灰色按钮(取消、关闭)

- (void)configureAsSaveCancelIPadHeaderWithTargetid)theTarget actionForYellowButtonSEL)selYellow actionForGrayButtonSEL)selGray

我想我可以像这样使这个方法更小:

- (void)configureAsSaveCancelIPadHeaderWithTargetid<SaveCancelViewControllerNavigationBar>)theTarget

并让目标响应协议(protocol)。

协议(protocol)如下所示:

@protocol PSaveCancelViewControllerNavigationBar <NSObject>
@required
- (void)saveid)sender;
- (void)closeThisViewid)sender;
@end

@required 关键字只会在这两种方法未实现时发出警告。

问题

如果目标包含这两个方法,那么在 configureAsSaveCancelIPadHeaderWithTarget: 方法中断言是否被认为是一种好的模式?像这样:

    - (void)configureAsSaveCancelIPadHeaderWithTargetid<SaveCancelViewControllerNavigationBar>)theTarget 
{
    NSAssert([theTarget respondsToSelectorselector(save], @"The provided target must implement the PSaveCancelViewControllerNavigationBar protocol and have the methods defined in that protocol.");
    NSAssert([theTarget respondsToSelectorselector(closeThisView], @"The provided target must implement the PSaveCancelViewControllerNavigationBar protocol and have the methods defined in that protocol.");

我以后肯定会调用这两个方法(save、closeThisView),所以我必须确保调用这个方法的类已经实现了它们。



Best Answer-推荐答案


这一切都取决于您想要制作的东西有多“安全”。仅仅因为您的参数指定需要协议(protocol)并不意味着传递的实例实现了该协议(protocol)。编译器所需要的只是让您保证在调用(强制转换)时它会这样做。

通常,如果您正在编写所有代码,那么仅使用协议(protocol)而不在运行时检查是相对“安全”的。

如果其他人正在使用代码,特别是如果您将代码作为库或类似的东西发布,那么检查会变得更加谨慎,因为您无法对其他人将要做什么做出任何假设。在这种情况下,最好尽早失败。

关于ios - 当已知对象符合协议(protocol)时,断言对象包含某些方法是一种好的模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21016560/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap