热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在方法参数中指定对象的协议-Howtospecifytheprotocolofanobjectinmethodparameters

本文介绍了如何在方法参数中指定一个对象的协议,以及如何调用符合该协议的方法。以一个具体的示例说明了如何在方法参数中指定一个UIView子类对象,并且该对象需要符合PixelUI协议,同时方法需要能够访问该对象的属性。

I want to pass an object to a method which should conform to a protocol, and be able to call the methods which are defined that protocol. However, I can't find any way of doing so. For example:

我想将一个对象传递给一个符合协议的方法,并且能够调用定义该协议的方法。但是,我找不到任何这样做的方法。例如:

+ (void)prepareToBounceInView:(UIView*)pixelUIView 
    fromEdge:(PixelUIViewBounceEdge)edge;

The first parameter of the method is a UIView subclass which should conform to the PixelUI protocol, and the method should then be able to access properties and call methods defined in the protocol.

该方法的第一个参数是一个UIView子类,它应该符合PixelUI协议,然后该方法应该能够访问协议中定义的属性和调用方法。

The only thing that worked was using id as the type of the object, but then I can't access any of the properties or methods of the object itself, only those defined in the protocol; so I have to re-cast the object as (UIView*) when I need to treat it as the object it is, rather than as the delegate. This creates some ugly syntax, like this:

唯一有效的方法是使用id 作为对象的类型,但是我无法访问对象本身的任何属性或方法,只能访问协议中定义的属性或方法;因此,当我需要将对象视为对象时,我必须将对象重新转换为(UIView *),而不是作为委托。这会创建一些丑陋的语法,如下所示:

UIView *view = (UIView*)pixelUIView;
view.frame = pixelUIView.bounceBackFrame;

where view and pixelUIView are actually the same object, but have to be accessed using two different variable names.

其中view和pixelUIView实际上是同一个对象,但必须使用两个不同的变量名来访问。

If this is impossible then I will do as I have been doing and pass it in as id and then re-cast it. But if there is some syntax which will allow me to pass it in as its actual object while still specifying its protocol I'd love to know.

如果这是不可能的,那么我将按照我的方式做,并将其作为id传递,然后重新投射它。但是,如果有一些语法允许我将其作为实际对象传递,同时仍然指定其协议,我很乐意知道。

1 个解决方案

#1


2  

The order of the protocol and the star is important:

协议和明星的顺序很重要:

+ (void)prepareToBounceInView:(UIView *)pixelUIView 
    fromEdge:(PixelUIViewBounceEdge)edge;

With this no casts should be necessary.

有了这个,不需要演员阵容。


推荐阅读
  • 本文介绍了如何使用Objective-C语言遍历指定文件夹,并根据文件扩展名来判断文件类型的方法。代码示例中通过创建一个文件管理器实例,利用目录枚举器遍历文件夹中的所有项,筛选出特定类型的文件。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 我在项目中发现设置了 GCC_NO_COMMON_BLOCKS = NO 的配置项,位于 Apple LLVM 编译器 3.1 的代码生成设置中。 ... [详细]
  • 作为一名在大型手机游戏公司工作的程序员,尽管主要负责游戏逻辑和内容的开发,但对iOS底层开发接触较少。现在有了iPhone和可以虚拟MAC环境的电脑,希望能找到有效的iOS开发学习路径。 ... [详细]
  • 本文详细介绍了如何在iOS5中创建和理解简单的Hello World应用,包括Interface Builder的使用、Objective-C源代码文件的结构以及事件处理机制。 ... [详细]
  • 使用Objective-C实现苹果官方NSLayoutConstraint页面布局
    本文详细介绍了如何在iOS开发中使用Objective-C语言通过NSLayoutConstraint来实现页面布局。示例代码展示了如何创建和应用约束,以确保界面元素能够正确地响应不同屏幕尺寸的变化。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • 本文介绍了在 iOS 开发中设置图片和视图圆角的几种方法,包括通过 layer 设置圆角、使用贝塞尔曲线和 Core Graphics 框架,以及使用 CAShapeLayer 和 UIBezierPath。每种方法都有其优缺点,适用于不同的场景。 ... [详细]
  • 深入解析Java枚举及其高级特性
    本文详细介绍了Java枚举的概念、语法、使用规则和应用场景,并探讨了其在实际编程中的高级应用。所有相关内容已收录于GitHub仓库[JavaLearningmanual](https://github.com/Ziphtracks/JavaLearningmanual),欢迎Star并持续关注。 ... [详细]
  • 本文介绍了如何利用Python的高精度计算库mpmath实现π的100种不同计算方法。通过设置更高的精度和优化的数学函数,这些方法能够提供极其精确的结果。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文介绍了iOS应用开发的主要框架,包括Foundation、UIKit、CoreData及CoreGraphics等,并探讨了开发iOS应用所需的硬件和软件环境,以及推荐的编程语言。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
author-avatar
shajc220
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有