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>.