Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 418 Vote(s) - 3.48 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Xcode playgrounds can't access swift files in Sources folder

#1
I just upgraded to Xcode 6.3 and they offered something new to the Playgrounds. If you make a new playgrounds and you open the project navigator, you will see a Sources folder and inside that there is a "SupportCode.swift" file. At the top of that file it reads

> This file (and all other Swift source files in the Sources directory of this playground) will be precompiled into a framework which is automatically made available to <PLAYGROUND_NAME>.playground.

I tried putting a function in to there and it is not available to my playground. What am I doing wrong? Do I have to manually compile the SupportCode.swift file manually? How?

Reply

#2
As mentioned when you create .swift files in Source folder they are automatically available to your playground code.
To control the access of different parts of this file you can use Access level modifiers which are: `public`, `internal` & `private`.

According to [Swift programming language access control][1]

The default access level in most cases is `internal` which accessible inside the module, but not the outside.

In other words, if you declare a class without access modifier you can access it from another file in Source folder but NOT in your playground's main file.
in other hand if you declare a class with public modifier you can access it in both cases.

for practical usage:
let's make an Singleton implementation
First: I create a new file in Source folder named 'Singy.swift'
with following code:

public class Singy {
public var name = ""
private static var instance: Singy?
private init() {}

public static func getSingy() -> Singy {
if Singy.instance == nil {
Singy.instance = Singy()
}
return Singy.instance!
}
}


Second:
from my playground

var s1 = Singy.getSingy()
var s2 = Singy.getSingy()
s1.name = "One"
print(s2.name)

Both `s1` and `s2` reference the same instance, but it created only within the class




[1]:

[To see links please register here]

Reply

#3
Playgrounds are good for running tests.
Put all your code in the `Sources` directory and have one publicly accessible 'test' class, for each test.
Then run the publicly accessible tests from the playground.

`playground`

Test1.run()
Testx.run()
...

`Sources/Test1.swift`

public class Test1 {
public static func run() {
let my_class = MyClass()
let result = my_class.do_something()
print(result)
}
}

`Sources/MyClass.swift`

class MyClass {
func do_something() -> String {
return "lol"
}
}

Reply

#4
You have to add **public** access attribute to your classes, methods and properties in source folder to make them accessible from main playground file as they treated as separate module by compiler
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through