学习笔记之 Block代码块

Blocks定义

1.Block是oc中的一种数据类型

2.^是Block的特有标记

3.Block的实现代码包含在{}之间

4.大多数情况下,以内联inline函数的方式被定义和使用

5.Block与C语言的指针有些相似,但使用起来更加灵活


示例

       int i = 10;
      void(^demoBlock)() = ^{
           NSLog(@"demo Block");
           NSLog(@"%d",i);
       };
       i = 100;
      demoBlock();
        
       int (^sumBlock)(int, int) = ^(int x, int y){
           return x + y;
      };
格式说明:

(返回类型) (^块名称) (参数名称) = ^(参数列表) {代码实现};

 如果没有参数,等号后面的参数列表()可以省略


 //Block 可以被当作参数直接传递
        NSArray *array = @[@"张三",@"李四",@"王五",@"赵六"];
        [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"第%d内容是%@",(int)idx,obj);
                if ([@"王五" isEqualToString:obj]) {
                *stop = YES;
            }
        
        }];
        
    }
    return 0;
}
<span style="font-family: Arial, Helvetica, sans-serif;"> //打印内容:</span>
<p class="p1"><span class="s1"><strong>2015-11-29 22:47:41.930 blocks[1296:1013880] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>0</strong></span><span class="s2"><strong>内容是张三</strong></span></p><p class="p1"><span class="s1"><strong>2015-11-29 22:47:41.931 blocks[1296:1013880] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>1</strong></span><span class="s2"><strong>内容是李四</strong></span></p><p class="p1"><span class="s1"><strong>2015-11-29 22:47:41.931 blocks[1296:1013880] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>2</strong></span><span class="s2"><strong>内容是王五</strong></span></p>
//说明:遍历并NSLog()arr中的内容
<p class="p1"><span class="s1">//</span><span class="s2">在被当参数传递时,</span><span class="s1">Block</span><span class="s2">同样可以使用在定义之前生命的局部变量</span></p><p class="p2"><span class="s2">        </span><span class="s3">int</span><span class="s2"> stopIndex = </span><span class="s4">1</span><span class="s2">;</span></p><p class="p2"><span class="s2">                </span><span class="s5">NSArray</span><span class="s2"> *array = </span><span class="s4">@[</span><span class="s6">@"</span><span class="s7">张三</span><span class="s6">"</span><span class="s2">,</span><span class="s6">@"</span><span class="s7">李四</span><span class="s6">"</span><span class="s2">,</span><span class="s6">@"</span><span class="s7">王五</span><span class="s6">"</span><span class="s2">,</span><span class="s6">@"</span><span class="s7">赵六</span><span class="s6">"</span><span class="s4">]</span><span class="s2">;</span></p><p class="p2"><span class="s2">                [array </span><span class="s8">enumerateObjectsUsingBlock</span><span class="s2">:^(</span><span class="s3">id</span><span class="s2">  </span><span class="s3">_Nonnull</span><span class="s2"> obj, </span><span class="s5">NSUInteger</span><span class="s2"> idx, </span><span class="s3">BOOL</span><span class="s2"> * </span><span class="s3">_Nonnull</span><span class="s2"> stop)</span></p><p class="p2"><span class="s2">                 {</span></p><p class="p2"><span class="s2">                     </span><span class="s8">NSLog</span><span class="s2">(</span><span class="s6">@"</span><span class="s7">第</span><span class="s6">%d</span><span class="s7">内容是</span><span class="s6">%@"</span><span class="s2">,(</span><span class="s3">int</span><span class="s2">)idx,obj);</span></p><p class="p2"><span class="s2">                     </span><span class="s3">if</span><span class="s2"> ([</span><span class="s6">@"</span><span class="s7">王五</span><span class="s6">"</span><span class="s2"> </span><span class="s8">isEqualToString</span><span class="s2">:obj] || idx == stopIndex)</span></p><p class="p2"><span class="s2">                         *stop = </span><span class="s3">YES</span><span class="s2">;</span></p><p class="p2"><span class="s2">                 }</span></p><p class="p3"><span class="s2">        </span></p><p class="p2"><span class="s2">                 ];</span></p><p class="p2"><span class="s2">    }</span></p>打印结果:<p class="p1"><span class="s1"><strong>2015-11-29 23:00:57.510 blocks[1311:1055122] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>0</strong></span><span class="s2"><strong>内容是张三</strong></span></p><p class="p1"><span class="s1"><strong>2015-11-29 23:00:57.511 blocks[1311:1055122] </strong></span><span class="s2"><strong>第</strong></span><span class="s1"><strong>1</strong></span><span class="s2"><strong>内容是李四</strong></span></p>

   注意 默认情况下, Block 外部的变量,在 Block 中是只读的!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
首先,感谢您对eclipse插件开发学习的关注!下面是一些学习笔记配套代码的例子。 1. 创建一个最简单的插件: ```java public class HelloWorldPlugin implements IStartup { @Override public void earlyStartup() { System.out.println("Hello, Eclipse Plugin Development!"); } } ``` 2. 在Eclipse菜单中添加一个新的命令: ```java public class MyCommandHandler extends AbstractHandler { @Override public Object execute(ExecutionEvent event) throws ExecutionException { MessageDialog.openInformation(HandlerUtil.getActiveWorkbenchWindow(event).getShell(), "My Command", "Hello, Eclipse Plugin Development!"); return null; } } ``` 3. 在编辑器右键菜单中添加一个新的动作: ```java public class MyEditorAction extends Action { public MyEditorAction() { setText("My Action"); } @Override public void run() { IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); if (editor instanceof ITextEditor) { ITextEditor textEditor = (ITextEditor) editor; IDocumentProvider documentProvider = textEditor.getDocumentProvider(); IDocument document = documentProvider.getDocument(textEditor.getEditorInput()); selectCurrentWord(textEditor, document); } } private void selectCurrentWord(ITextEditor editor, IDocument document) { ISelectionProvider selectionProvider = editor.getSelectionProvider(); ITextSelection selection = (ITextSelection) selectionProvider.getSelection(); int offset = selection.getOffset(); try { int lineStartOffset = document.getLineOffset(selection.getStartLine()); int lineEndOffset = lineStartOffset + document.getLineLength(selection.getStartLine()); String lineText = document.get(lineStartOffset, lineEndOffset - lineStartOffset); int wordStartOffset = lineText.lastIndexOf(' ', offset - lineStartOffset) + 1; int wordEndOffset = lineText.indexOf(' ', offset - lineStartOffset); if (wordEndOffset < wordStartOffset) { // The word is the last or only word on the line wordEndOffset = lineEndOffset - lineStartOffset; } else { wordEndOffset += lineStartOffset; } selectionProvider.setSelection(new TextSelection(wordStartOffset, wordEndOffset - wordStartOffset)); } catch (BadLocationException e) { e.printStackTrace(); } } } ``` 此处仅提供了一些简单的示例代码,以帮助您开始使用eclipse插件开发。有关更详细的学习和开发指导,请参阅Eclipse官方文档和教程。祝您在插件开发的学习过程中取得成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值