Swift协议定义为空:
public protocol CVarArgType {
}
苹果文档页面没有列出任何必需的方法: https://developer.apple.com/library/ios/documentation/Swift/Reference/Swift_CVarArgType_Protocol/index.html 因此,我认为这应该可以工作:
extension String : CVarArgType {
}
但是我遇到了一个构建错误:协议要求具有类型为 '[Int]'(Swift.CVarArgType)的'_cVarArgEncoding'属性
鉴于协议定义为空,这个要求从哪里来?
如果我实现计算属性,将会如何继续前进:
extension String : CVarArgType {
public var _cVarArgEncoding: [Int] {
get {
//What is expected to be returned here?
}
}
}
预期返回一个 Int
数组?
更新:我为什么需要这个?
我有一个名为 Identifiable 的协议,我的 Core Data 实体模型类符合该协议,我有一个对该协议的扩展,其中包含一些限制条件,以提供一个使用 id 值在 NSPredicate 中格式化构造函数中的函数,该函数需要 CVarArgType。
public protocol Identifiable {
typealias IdentityType: CVarArgType, Hashable
var id: IdentityType { get }
}
extension Identifiable where Self: Findable, Self: NSManagedObject {
static public func find(id: IdentityType, context: NSManagedObjectContext) -> Self? {
return find(NSPredicate(format: "id = %@", id), context: context)
}
}
public extension Findable where Self: NSManagedObject {
static public func find(predicate: NSPredicate?, context: NSManagedObjectContext) throws -> Self? {
let fetchRequest = fetchRequestForEntity(inContext: context)
fetchRequest.predicate = predicate
fetchRequest.fetchLimit = 1
return try context.executeFetchRequest(fetchRequest).first as? Self
}
}
va_list
参数。然而,我认为这个问题仍然有一些优点,因为它探索了ObjectiveC-Swift集成的边缘。编码可以指 ObjectiveC类型编码。如果您能解释您想要做什么,我们可以提供更多帮助。 - Code Differentinit(format predicateFormat: String, argumentArray arguments: [AnyObject]?)
- Joseph Lord