`
啸笑天
  • 浏览: 3436540 次
  • 性别: 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兼容。

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    SwiftTheme-master.zip

    @IBAction @objc(tapRed:) func tapRed(_ sender: AnyObject) { MyThemes.switchTo(theme: .red) } @IBAction @objc func tapYellow(_ sender: AnyObject) { MyThemes.switchTo(theme: .yello) } ...

    j2objc-annotations-1.1-API文档-中文版.zip

    赠送jar包:j2objc-annotations-1.1.jar; 赠送原API文档:j2objc-annotations-1.1-javadoc.jar; 赠送源代码:j2objc-annotations-1.1-sources.jar; 赠送Maven依赖信息文件:j2objc-annotations-1.1.pom; 包含...

    WSDL2Objc下载工具

    只用来下载WSDL2Objc第三方开发代码包的,用于iOS的websevrice

    objc运行时源码探究

    结合objc_class的数据结构,分析了objc_msgSend的具体执行流程

    ios-SwiftWkWebView 第三次更新.zip

    @objc optional func didAddScriptMessage(webView:WKWebView,message:WKScriptMessage) //页面执行JS方法 @objc optional func didRunJavaScript(webView:WKWebView,result:Any?,error:Error?)

    汉字转拼音的objc库PinYin4Objc.zip

    支持自定义格式化,拼音大小写等等; 3.拼音数据完整,支持中文简体和繁体,与网络上流行的相关项目比,数据很全,几乎没有出现转换错误的问题。 性能比较: 与之前的pinyin,POAPinyin和PYMethod等项目比较,PinYin...

    objc使用正则表达式

    objc 本地读取网页并使用正则表达式处理

    苹果objc开源项目配置mac M1可编译调试版本-841.13

    如果想真正了解ios底层原理,除了阅读源码,没有捷径可走,但是没有一个可编译调试的环境,进阶无从谈起,本资源包为想进阶ios底层的小伙伴提供了可编译版本,编译的版本为苹果开源版本objc4-objc4-841.13,M1的电脑...

    Objc中国 APP 架构 完整版

    Objc中国 APP 架构 完整版 高清

    高清正版 objc中国 CoreData

    高清正版 objc中国 CoreData

    Core Data objc

    Core Data objc Core Data objc Core Data objc Core Data objc Core Data objc

    objc4源代码

    objc语言源代码。阅读时可以先浏览一下所有的runtime API,就可对objc语言的实现原理有大致的了解,后续阅读才会更清晰。

    objc 中国 app 架构

    objc 中国 最新版本的 app架构 ,https://objccn.io/products/

    objc.io app architechture

    objc.io app architechture 中文版 APP 架构 iOS objc.io app architechture 中文版 APP 架构 iOS

    Objc 最新 App 架构 ePub版本

    Objc 最新 App 架构 ePub版本,分享给大家。

    j2objc-annotations-1.1-API文档-中英对照版.zip

    赠送jar包:j2objc-annotations-1.1.jar; 赠送原API文档:j2objc-annotations-1.1-javadoc.jar; 赠送源代码:j2objc-annotations-1.1-sources.jar; 赠送Maven依赖信息文件:j2objc-annotations-1.1.pom; 包含...

    j2objc-annotations-1.3-API文档-中文版.zip

    赠送jar包:j2objc-annotations-1.3.jar; 赠送原API文档:j2objc-annotations-1.3-javadoc.jar; 赠送源代码:j2objc-annotations-1.3-sources.jar; 赠送Maven依赖信息文件:j2objc-annotations-1.3.pom; 包含...

    SyncEngine:在iCloud和Realm之间进行同步

    @objc dynamic var title: String = " " } AppDelegate application. registerForRemoteNotifications () syncEngine. register ( models : [SimpleNote. self ]) syncEngine. start () 同步 syncEngine.sync() ...

Global site tag (gtag.js) - Google Analytics