gpt4 book ai didi

ios - Swift 和方法原型(prototype)——前向声明

转载 作者:IT王子 更新时间:2023-10-29 05:53:30 24 4
gpt4 key购买 nike

探索 Swift header 我看到 Apple 使用了这种模式,特别是以下结构的 init 声明没有实现。显然 init() 实现以某种方式被隐藏了,因为它是 Apple 的东西,但我试图了解如何。这只是一个例子,但它似乎是 header 中的常见行为

struct AutoreleasingUnsafePointer<T> : Equatable, LogicValue {
let value: Builtin.RawPointer
init(_ value: Builtin.RawPointer) // <---- how is it possible? where is the implementation?
func getLogicValue() -> Bool

/// Access the underlying raw memory, getting and
/// setting values.
var memory: T

}

我知道可以声明一个协议(protocol)加上一个类扩展,这样做可以从类声明中“隐藏”实现并将其移动到其他地方

class TestClass :TestClassProtocol
{
// nothing here

}

protocol TestClassProtocol
{
func someMethod() // here is the method declaration

}

extension TestClass
{
func someMethod() // here is the method implementation
{
println("extended method")
}

}

但这与我在 Apple Headers 中看到的不同,因为方法“声明”在“类”中,而不是在“协议(protocol)”中。但是,如果我尝试将方法声明放在类 TestClass 中,则会出现两个错误(类上没有主体的函数,以及扩展上的无效重新声明)

在 Objective C 中这是“隐含的”,因为方法声明在 .h 中,而实现在 .m 中如何在 Swift 中做同样的事情?

最佳答案

我认为解释很简单。您在 Xcode 中看到的实际上不是有效的 Swift代码。

这是将 Obj-C header 自动转换为类似 Swift 的代码的结果,但它不是可编译的 Swift。

关于ios - Swift 和方法原型(prototype)——前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24025511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com