在Swift中分离函数声明和定义

时间:2014-08-08 19:02:55

标签: swift encapsulation

我正在看一下新的Swift。我来自C,C ++,Objective-C ......我注意到在swift中不可能(?)分隔声明和函数的定义。结果是结构和类声明非常长且臃肿,因此很难得到一个快速的图像"通过查看代码的类。难道我做错了什么?有没有办法克服这个问题,除了试图使功能小,等?提前致谢

5 个答案:

答案 0 :(得分:5)

在swift中,声明与实现没有分离。这与大多数其他现代语言(如Python)一样。如果你想快速了解你的课程,你应该使用代码折叠。只需折叠您的所有方法和功能。并展开一种你想要修改/处理它的方法。

答案 1 :(得分:2)

使用公共API和私有实现只是一种疯狂的方法:

疯狂 - 代表工厂方法create(),我不喜欢在没有实际需要的情况下迅速看到它。

AClass.swift 文件中:

// Public API
class AClass {

    private init() {

    }

    class func create() -> AClass {
        return AClassPrivateImplementation()
    }

    // Only method declaration
    func sayHello() {}
}

// Private implementation
private class AClassPrivateImplementation: AClass {

    override func sayHello() {
        privateImplementation()
    }

    func privateImplementation() {
        println("Hello")
    }
}

<强>用法:

let a = AClass.create()
a.sayHello()

为什么会有效: private修饰符只会在源文件中显示内容。

优势:您可以定义多个实施,因此需要额外的createOther()

缺点:它看起来像Java或C#,而不是Swift方式:)

答案 2 :(得分:2)

关于我们所能做的最好的事情是使用协议作为实现声明并标记所有私有方法:

protocol TestInterface {
    var propertyPublic1: String { get }
    func funcPublic1() -> Int
}

class Test : TestInterface {
    var propertyPublic1: String = "text."
    func funcPublic1() -> Int {return 754}

    private var propertyPrivate1: Int = 5678
    private func funcPrivate1() -> Int {return 334}
}

var t = Test()
let propPublic1 = t.propertyPublic1

问题在于它不是作为标准惯用语提供的,命名是不幸的,我刚刚将“Interface”附加到类名。

答案 3 :(得分:1)

Swift不允许您将声明与实现分开。这会削减两种方式 - 一方面,您无法(手动)编写头文件,该文件描述了您希望为代码用户公开的接口。另一方面,您不必手动使头文件保持最新并与您的实施保持同步。

相反,Swift有一个access control机制。使用publicinternal(隐含)和private关键字来标记您要公开的类型和功能。

答案 4 :(得分:1)

是的,swift确实没有头文件,但你可以让Xcode生成类似的东西。

如您所述,这将为您提供课程概述。

在Xcode上转到Navigation > Jump to Generated Interface

这个link应该解释一下。