什么是Swift中的关键字Protocol(大写P)

时间:2016-02-25 13:00:23

标签: swift foundation

刚发现您可以直接输入Protocol,其类型与其他2种情况不同 enter image description here

实际上你可以尝试初始化并得到一条错误消息,某种暗示某事 enter image description here

但是Protocol在Swift中做了什么?

2 个答案:

答案 0 :(得分:4)

Protocol是一个,它在Objective-C运行时中定义 并代表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>

答案 1 :(得分:1)

它是一种元类型,用于定义您在应用中创建的protocol。就像 Type 一样,用于类和结构

元类型类型是指任何类型的类型,包括类类型,结构类型,枚举类型和协议类型。

类,结构或枚举类型的元类型是该类型的名称,后跟.Type。协议类型的元类型 - 不是在运行时符合协议的具体类型 - 是该协议的名称,后跟.Protocol。例如,SomeClass类类型的元类型是SomeClass.Type,协议SomeProtocol的元类型是SomeProtocol.Protocol。