Structure in a single Swift file?

It might be basic and wrong but after understanding structures I can't understand where to practically put it.

Inside some class call it Main, I would like to encapsulate a set of variables for dimensions.

I know I can just do :

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

class Main
{
   //do things using the structure
}

But since i have a lot of variables and i want it clean , I would like to create a new Swift file and put it inside

So inside a file called Dimensions or else :

import Foundation

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

then the structure is visible to anyone, without even using the Swift file name.

A few questions to ask :

  1. It seems like a bad idea - why ?
  2. How is it different from a Singeltone to share data between classes? (value type?)
  3. What is the right place to put the structure outside the Main class to get some clear code ?
  4. Should I make one file with many not related Structs ?

1 answer

  • answered 2018-11-08 07:14 Sweeper

    then the structure is visible to anyone

    That is not true. Since your struct is not marked public, only code in your module can access it. Even if you write it in one single file, it is still accessible anywhere in your module.

    without even using the Swift file name.

    The reason why you are saying this might be because in other languages, you need to import a header file or something like that if you want to use something from another file (I'm not an expert in "other languages"). But Swift organises its code in units of modules, not files.

    It seems like a bad idea - why ?

    It is not a bad idea. Putting different types in different files is a good way to organise your code. When I go to Car.swift I wouldn't expect to see the class Game.

    How is it different from a Singeltone to share data between classes? (value type?)

    Here you are just writing things in different files. As far as the compiler is concerned, this is not much different from writing everything in a single file because Swift organises code in modules, not files. The Singleton pattern is something completely different. It is when you only have one shared instance of a type.

    What is the right place to put the structure outside the Main class to get some clear code ?

    In another file, because Main should really be in its own file.

    Should I make one file with many not related Structs ?

    No. That is a bad way of organising your code. When you want to find a particular struct, how do you know which file it is in?