一、继承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;