OC调用Swift的闭坑操作

OC调用Swift的闭坑操作

IOS小彩虹2021-08-22 2:42:59150A+A-

一、继承NSObject的类

  • 类不需要@objc标记

  • 方法需要标记为 @objc

class CTPermission: NSObject {
    
 @objc func request(id:Int,name:String) -> String{
        
        return ""
 }
    
}

@objc 的作用是改变函数的派发方式,如果没有添加@objc则函数的派发方式为函数表派发。@objc 修饰后函数的派发方式为消息派发

注意:当 request() 函数没有被重写时,此函数的派发方式会被优化成直接派发。

  • 成员变量需要 @objc
class CTPermission: NSObject {
    
 @objc let name:String = "xuenai~"
 @objc static let name:String = "xuenai~"

  • 成员变量、函数 还可以用另一种方式使得让OC访问 #@objcMembers#
@objcMembers
class Permission:NSObject{
    /// function
    func request(id:Int,name:String) -> String{
        
        return ""
    }
    
    /// member
    var name:String = "xuenai~"
    static let name:String = "xuenai~"

}
  • var、let

无论是var还是let

  • 修饰的String,转到OC后都是NSString

  • 修饰的NSMutableString,转到OC后都是NSMutableString

  • 修饰的Array,转到OC后都是NSArray

  • int 转到OC 后都是 NSInteger

  • 即使是NSMutableString,也需要用上面两种方式修饰(@objc或者@objcMembers)

  • 枚举必须是int类型

@objc enum PermissionType:Int {
    case photo
    case micphone
}

  • struct 在OC中是无法使用的

  • 全局变量、全局函数 在OC中是无法使用的

二、Swift中调用OC

  • OC类中的

    • int -> Int32
    • NSInteger -> Int
    • NSNumber ->NSNumber
    • NSValue -> NSValue
  • OC类中的枚举

typedef enum RequestType: NSUInteger {
    RequestTypeNone,
    RequestTypeSex,
    RequestTypeName,
} RequestTypeDefault;

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1
本网站由 提供CDN/云存储服务

联系我们