Swift 中的关键字协议(大写 P)是什么
what is the keyword Protocol (capital P) do in Swift
刚发现可以直接打字Protocol
,而且Type和其他2种不同
实际上你可以尝试初始化它并得到一条错误消息,提示某种东西
但是 Protocol
在 Swift 中究竟做了什么?
它是一种元类型,用于定义您在应用中创建的 protocol
。它就像 Type 用于 class 和结构
元类型类型是指任何类型的类型,包括class类型、结构类型、枚举类型和协议类型。
class、结构或枚举类型的元类型是该类型的名称后跟 .Type。协议类型的元类型——不是在运行时符合协议的具体类型——是该协议的名称后跟 .Protocol。例如,class 类型 SomeClass 的元类型是 SomeClass.Type,协议 SomeProtocol 的元类型是 SomeProtocol.Protocol.
Protocol
是在 Objective-C 运行时定义的 class
并代表 Objective-C 协议。示例:
let p = objc_getProtocol("NSObject")!
print(p.dynamicType) // Output: "Protocol"
objc_getProtocol
声明为
/**
* Returns a specified protocol.
*
* @param name The name of a protocol.
*
* @return The protocol named \e name, or \c NULL if no protocol named \e name could be found.
*
* @note This function acquires the runtime lock.
*/
@available(OSX 10.5, *)
public func objc_getProtocol(name: UnsafePointer<Int8>) -> Protocol!
和 Protocol
声明为
// typedef Protocol is here:
// All methods of class Protocol are unavailable.
// Use the functions in objc/runtime.h instead.
@available(OSX 10.0, *)
public class Protocol {
}
基础 Objective-C 定义可以在
<objc/Protocol.h>
和
<objc/runtime.h>
.
刚发现可以直接打字Protocol
,而且Type和其他2种不同
实际上你可以尝试初始化它并得到一条错误消息,提示某种东西
但是 Protocol
在 Swift 中究竟做了什么?
它是一种元类型,用于定义您在应用中创建的 protocol
。它就像 Type 用于 class 和结构
元类型类型是指任何类型的类型,包括class类型、结构类型、枚举类型和协议类型。
class、结构或枚举类型的元类型是该类型的名称后跟 .Type。协议类型的元类型——不是在运行时符合协议的具体类型——是该协议的名称后跟 .Protocol。例如,class 类型 SomeClass 的元类型是 SomeClass.Type,协议 SomeProtocol 的元类型是 SomeProtocol.Protocol.
Protocol
是在 Objective-C 运行时定义的 class
并代表 Objective-C 协议。示例:
let p = objc_getProtocol("NSObject")!
print(p.dynamicType) // Output: "Protocol"
objc_getProtocol
声明为
/**
* Returns a specified protocol.
*
* @param name The name of a protocol.
*
* @return The protocol named \e name, or \c NULL if no protocol named \e name could be found.
*
* @note This function acquires the runtime lock.
*/
@available(OSX 10.5, *)
public func objc_getProtocol(name: UnsafePointer<Int8>) -> Protocol!
和 Protocol
声明为
// typedef Protocol is here:
// All methods of class Protocol are unavailable.
// Use the functions in objc/runtime.h instead.
@available(OSX 10.0, *)
public class Protocol {
}
基础 Objective-C 定义可以在
<objc/Protocol.h>
和
<objc/runtime.h>
.