`
啸笑天
  • 浏览: 3462594 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

@objc小结

 
阅读更多

 原文

1 、Selector(oc/swift)中调用swift类中私有方法需要在方法前声明 @objc

  @objc private func privateSayHello(){

        print("\(__FUNCTION__)")

    }

比如NStime ,performSelector中用到Selector:

[video performSelector:@selector(privateSayHello)];

2、 swfit提供oc调用接口

在swift类前加 @objc可以提供给oc调用的接口(xcode7beta4之前)

还可以让swift继承NSOject实现同样的效果。

ps:在xcode7beta4必须继承NSOject,只写 @objc会报错:Only classes that inherit from NSObject can be declared @objc

class VideoItem:NSObject{

    weak var delegate:MyClassDelegate?

    var name: String

    

    init(name:String){

        self.name = name

    }

}

 

3、 修改swift中类名/属性名/方法名给oc使用

@objc(GameSwfitItem)

class GameItem:NSObject{

    @objc(swiftName)

    var name: String

    

    @objc(initSwift:)

    init(name:String){

        self.name = name

    }

}

 

GameSwfitItem *game = [[GameSwfitItem alloc] initSwift:@"007g"];

NSLog(@"%@",game.swiftName);

 

4 、提供可选协议给类使用

@objc protocol OptionalProtocol{

    @objc optional func optionalMethold1()

    @objc optional func optionalMethold2()

    func requestMethold1()

}

局限性:加@objc的协议只能类使用(继承oc的类或加@objc的类),struct,enum不可以使用。

              每个可选方法都需要加optional

swfit2中推荐可选方法用protocol eatension实现可选方法

 

5、 weak delegate

protocol MyClassDelegate{

    func methold1()

}

class VideoItem:NSObject,MyClassDelegate{

    weak var delegate:MyClassDelegate?

}

你直接这样写会报错:'weak' cannot be applied to non-class type ‘MyClassDelegate’,因为struct,enum中在arc中没有weak这种概念,不是引用计数来管理内存的。

可以在protocol前加@objc

@objc protocol MyClassDelegate{

    func methold1()

}

 

或者在protocol声明后加class

protocol MyClassDelegate:class{

    func methold1()

 

}

 

 

这样他们只能被类使用,其实用class更能表现问题的实质,同时避免了过多不必要的oc兼容。

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    ios 代码写Button小结

    本文将结合《ios 代码写Button小结》中的内容,深入探讨如何通过代码创建和定制UIButton。 首先,让我们了解UIButton的基本用法。在Objective-C中,我们可以使用下面的代码创建一个简单的按钮: ```objc UIButton ...

    Swift3迁移至Swift4可能遇到的问题小结

    要解决这个问题,你可以进入你的 Target 设置,搜索 "Swift3 @objc Inference",并将值从 "On" 改为 "Off" 或 "Default"。这会消除警告,并确保代码符合 Swift 4 的最佳实践。 2. **String 的 subString 方法废弃**...

    iOS NSNotificationCenter通知中心使用小结

    【iOS NSNotificationCenter通知中心使用小结】 iOS中的NSNotification中心是一个重要的通信机制,它允许对象间进行松耦合的消息传递。NSNotification与Delegate都是iOS中常见的消息传递方式,它们各有特点和适用...

    iphone使用GDataXMLParser解析xml文件小结

    ```objc #import "GDataXMLNode.h" #import "GDataXMLDocument.h" ``` 然后创建一个遵循`GDataXMLParserDelegate`协议的对象,这个对象将接收并处理解析过程中的事件。例如: ```objc @interface XMLParser : ...

    信鸽推送接入小结1

    ```objc @interface AppDelegate () @end - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[XGPush defaultManager] startXGWithAppID:@...

    IOS中的七种手势小结

    @objc func pinchAction(_ sender: UIPinchGestureRecognizer) { let scale = sender.scale guard let view = sender.view else { return } view.transform = CGAffineTransform(scaleX: scale, y: scale) ...

    Xcode 8打印log日志的问题小结及解决方法

    本文将针对这一问题进行小结,并提供相应的解决方法。 首先,我们来了解一下如何禁用Xcode 8中的部分log日志。在开发过程中,如果想要去除那些“烦人的log日志”,可以通过以下步骤操作: 1. 打开Xcode菜单栏,...

    iOS开发中使用UILabel设置字体的相关技巧小结

    ```objc UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)]; [self.view addSubview:myLabel]; ``` 接着,我们来设置UILabel的文字内容。最基础的是设置默认文本,可以通过`text`...

    iOS应用开发中AFNetworking库的常用HTTP操作方法小结

    ```objc AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *...

    Objective-C中字符串的拼接方法小结

    ```objc NSString *string1 = @"Hello"; NSString *string2 = @"World"; NSString *string = [NSString initWithFormat:@"%@, %@", string1, string2]; ``` 上面的代码会创建一个新的`NSString`对象,内容为"Hello,...

    iOS开发中控制屏幕旋转的编写方法小结

    ```objc - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } ``` 然而,随着iOS6的发布,这...

    iOS开发之枚举用法小结

    ```objc typedef NS_ENUM(NSInteger, Test){ TestA = 0, TestB, TestC, TestD }; ``` `NS_OPTIONS`的使用示例: ```objc typedef NS_OPTIONS(NSUInteger, Test) { TestNone = 0, TestA = 1 , TestB = 1 , ...

    iOS中containsString和rangeOfString的区别小结

    这个方法的优点在于它的灵活性,可以配合`options`参数进行更复杂的搜索,如忽略大小写、使用正则表达式等。例如: ```objc NSString *str = @"我是iOS开发工程师"; NSString *search = @"iOS"; NSRange range = ...

    iOS开发中对文件目录的访问及管理的基本方法小结

    ```objc NSString* path = [[NSBundle mainBundle] pathForResource:@"aaa" ofType:@"png"]; ``` 对于Documents目录,可以使用`NSSearchPathForDirectoriesInDomains`来获取: ```objc NSArray *paths = ...

    objectC类的声明和实现

    #### 四、小结 通过上述介绍,我们了解了Object-C中类的基本结构以及属性的声明和使用方法。在实际开发过程中,合理地利用这些概念可以帮助开发者构建出高效且易于维护的应用程序。无论是对于初学者还是有经验的...

    objective-c 的偏好设置

    小结 Objective-C 的偏好设置是实现用户定制体验的关键工具。熟练掌握 `NSUserDefaults` 的使用,能够帮助开发者创建更符合用户需求的应用。通过理解偏好设置的读写、持久化、以及如何处理复杂数据,可以进一步提升...

    Swift 共享文件操作小结(iOS 8 +)

    var isDir: ObjCBool = false if !path.isEmpty && fileManager.fileExistsAtPath(path, isDirectory: &isDir) { if isDir { do { let files = try fileManager.contentsOfDirectoryAtPath(path) for file in ...

Global site tag (gtag.js) - Google Analytics