Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能使Swift';s字符串类型是否符合CVarArgType协议?_Swift - Fatal编程技术网

我怎样才能使Swift';s字符串类型是否符合CVarArgType协议?

我怎样才能使Swift';s字符串类型是否符合CVarArgType协议?,swift,Swift,Swift协议定义为空: public protocol CVarArgType { } Apple文档页面没有列出任何必需的方法: 所以我希望这能奏效: extension String : CVarArgType { } 但是我得到了一个生成错误:协议需要属性“\u cvargencode”和类型“[Int]”(Swift.CVarArgType) 鉴于协议定义为空,此要求从何而来 如果我实现computed属性,请继续: extension String : CVarArgType

Swift协议定义为空:

public protocol CVarArgType {
}
Apple文档页面没有列出任何必需的方法:

所以我希望这能奏效:

extension String : CVarArgType {

}
但是我得到了一个生成错误:协议需要属性“\u cvargencode”和类型“[Int]”(Swift.CVarArgType)

鉴于协议定义为空,此要求从何而来

如果我实现computed属性,请继续:

extension String : CVarArgType {
    public var _cVarArgEncoding: [Int] {
        get {
            //What is expected to be returned here?
        }
    }
}
希望以
Int
数组的形式返回什么

更新:我为什么需要这个?

我有一个名为Identification的协议,我的核心数据实体模型类符合该协议,我有一个对此协议的扩展,带有几个约束,以提供一个函数,该函数使用NSPredicate with format构造函数中的id值,该构造函数需要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
    }

}

我认为你不应该试图让其他类型的人也适应他们。报告说:

注意:该协议是公共的,但其要求是stdlib专用的。 这是因为有一些API在CVarArg实例上运行,但不支持在标准库之外定义与CVarArg的一致性


stdlib在很多方面都很特殊,并且比用户代码更深入地嵌入到构建系统中。这方面的一个例子是,许多stdlib函数可以内联到您自己的代码中,这在其他情况下不可能跨越模块边界。

我看不出这有什么实际价值,有更好的方法使用
va_list
参数。然而,我认为这个问题仍然有一些优点,因为它探索了ObjectiveC Swift集成的边缘。编码可以引用。如果你能解释你想做什么,我们可以帮你more@CodeDifferent我已经更新了问题以提供更多上下文。您是否可以不使用NSPredicate的arrayArgument init?-
init(format predicateFormat:String,argumentArray arguments:[AnyObject]?)
No我得到一个生成错误
类型为'Self.IdentityType'的值与预期的元素类型'AnyObject'不符。
您的协议没有继承自NSObjectProtocol,它应该会解决这个问题。无论如何,结构和枚举可能无法与NSPredicate很好地混合。实际上,您可以将其强制转换为AnyObject,因为它是此扩展中的NSManagedObject。