结构在单个Swift文件中?

结构在单个Swift文件中?,swift,struct,Swift,Struct,它可能是基本的和错误的,但在理解了结构之后,我不知道实际应该把它放在哪里 在一些名为Main的类中,我想为维度封装一组变量 我知道我可以做到: struct Dimensions{ var w:Int var h:Int } class Main { //do things using the structure } 但由于我有很多变量,我希望它干净,我想创建一个新的Swift文件并将其放入其中 所以在一个名为Dimensions的文件中,或者: import Foundation

它可能是基本的和错误的,但在理解了结构之后,我不知道实际应该把它放在哪里

在一些名为
Main
的类中,我想为维度封装一组变量

我知道我可以做到:

struct Dimensions{
var w:Int
var h:Int
}

class Main
{
   //do things using the structure
}
但由于我有很多变量,我希望它干净,我想创建一个新的Swift文件并将其放入其中

所以在一个名为
Dimensions
的文件中,或者:

import Foundation

struct Dimensions{
var w:Int
var h:Int
}
然后,结构对任何人都可见,甚至不使用Swift文件名

要问的几个问题:

  • 这似乎是个坏主意——为什么
  • 在类之间共享数据与
    singletone
    有何不同?(值类型?)
  • 将结构放在主类之外以获得清晰代码的正确位置是什么
  • 我应该用许多不相关的
    结构创建一个文件吗
  • 然后结构对任何人都可见

    事实并非如此。由于您的结构未标记为
    public
    ,因此只有模块中的代码才能访问它。即使您将其写入一个文件中,它仍然可以在模块中的任何位置访问

    甚至不用Swift文件名


    您之所以这样说,可能是因为在其他语言中,如果您想使用其他文件中的内容,您需要导入头文件或类似的内容(我不是“其他语言”方面的专家)。但Swift以模块为单位组织代码,而不是以文件为单位

    这似乎是个坏主意——为什么

    这不是个坏主意。将不同的类型放在不同的文件中是组织代码的好方法。当我去
    Car.swift
    时,我不希望看到class
    游戏

    在类之间共享数据与单例有什么不同?(值类型?)

    在这里,您只是在不同的文件中编写内容。就编译器而言,这与在单个文件中编写所有内容没有太大区别,因为Swift将代码组织在模块中,而不是文件中。单身模式是完全不同的。当您只有一个类型的共享实例时

    将结构放在主类之外以获得清晰代码的正确位置是什么

    在另一个文件中,因为
    Main
    实际上应该在它自己的文件中

    我应该用许多不相关的结构创建一个文件吗


    不,这是一种组织代码的糟糕方式。当你想找到一个特定的结构时,你如何知道它在哪个文件中?

    为什么这看起来是个坏主意?每个类或结构一个文件有什么问题?这似乎是个坏主意,因为我不是专家,使用这种体系结构似乎太容易了,而在类之间共享数据,你必须创建一个单音类(为什么有单音类的想法?)?结构是在自己的文件中定义的,还是在包含其他类和/或结构的文件中定义的,与使用单例或共享数据完全无关。它们甚至不是远程相关的概念。@Curnelious您为结构创建的文件数量应该基于方便性。我通常每个文件只保留一个结构或类。谢谢,我想我必须了解更多。对我来说,奇怪的是,我不必做创建实例的艰苦工作,只要在我想要的地方使用结构名称(不像类),谢谢!只是不理解“只有模块中的代码才能访问它。”如果文件是模块,那么这似乎是错误的,因为文件/模块维度包含my struct,而文件/模块Main可以访问它,并且工作正常。我错过了什么?@Curnelious文件不是模块。请看这个。“Swift以模块为单位组织代码,而不是以文件为单位。”这意味着什么?当我做File->New File->Swift File,然后给它一个名字(一个类,从UIView继承的,或者只是一个空文件),你怎么称呼它?@Curnelious我不是说Swift文件不存在。我的意思是,Swift编译器在大多数情况下都不关心文件——不管您是将所有代码放在一个文件还是10个文件中。例外情况是访问修饰符
    fileprivate
    ,它使类型/函数/属性只能在同一文件中访问。