iOS中“函数式”UIAlertView

在这个例子中,我们要展示一个UIAlertView,并且当用户按下确认按钮时要执行一个动作。过程式方法做到这一点需要先创建一个UIAlertView对象,设置委托并实现回调,显示UIAlertView,然后释放。

UIAlertView示例(过程式)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
    -(IBAction) buttonTapped:(id) sender {
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Send email"
      message:@"Are you sure you want to send it now?"
      delegate:self
      cancelButtonTitle:@"Cancel"
      otherButtonTitles:@"Send", nil];

      [alert show];
      [alert release];
    }

    -(void)alertView:(UIAlertView*) alertView didDismissWithButtonIndex:(NSInt
    eger) buttonIndex {

      if(buttonIndex != [alertView cancelButtonIndex]) {
        [self sendTheMail];
      }
    }

    -(void) sendTheMail {
      // 发送邮件的代码
    }

先不管实现(和语法),现在看看怎么调用一个遵循函数式范式的UIAlertView

UIAlertView示例(函数式)

1
2
3
4
5
6
7
8
9
    [UIAlertView showAlertViewWithTitle:@"Send email"
    message:@"Are you sure you want to send it now?"
    cancelButtonTitle:@"Cancel"
    otherButtonTitles:[NSArray arrayWithObjects:@"Send", nil] onCompletion:^{
      // 发送邮件的代码
    }
    onCancel:^{
      // 处理其他情况的代码
    }];

这样清楚多了。

  • 不需要实现委托。
  • 不需要分配或释放对象。
  • 不需要明确地显示警告对话框。

只要说明你的意图,它就会在幕后自动执行。

在函数式编程的例子中,代码读起来像人类语言。以声明方式指定标题、需要显示的消息。当用户关闭警告对话框时,又有你声明的两种方式下需要执行的代码。无论是用户接受并关闭,还是取消并关闭,都不用实现委托。

重点是你只需要说明意图,而不用发出指令,而且代码读起来更清晰易懂。

想象一下,如果一个视图控制器需要显示多个警告对话框,同时又要在回调委托中用标签(tag)来区分不同的警告对话框……相信你已经体会到这段代码的妙处了。理解了这一点,你就抓住函数式编程的本质了。

在“基于块的UIAlertView”中,你会学习如何把这个方法实现为UIAlertView的分类方法,还有语法以及其他相关的东西。


你可能会想,既然微处理器最终还是一条一条地执行指令,那为什么还要用函数式编程呢?这是个好问题。函数式编程基本就是为了写出对合作开发者来说易读易懂的代码。可以肯定,等价的命令式逻辑执行效率更高。但根据摩尔定律,微处理器的速度增长很快。因此代码的清晰易读通常要比性能重要。还有,这并不意味着你只能用函数式编程。并不是现实中的所有问题都能用函数方式表达。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值