From the Swift Repl, How to Get a List of Available Modules

Howto load SwiftPM project + its dependencies in Swift repl

These are the steps to follow for a solution using Swift 4.

Create a folder, let's say "TestSPMLibrary":

$ mkdir TestSPMLibrary
$ cd TestSPMLibrary

Create a library package:

$ swift package init --type library

In the "Package.swift" file, add the ".dynamic" library type.

You can also add a dependency such as Alamofire (you need to also add it to the target).

My "Package.swift" example:

// swift-tools-version:4.0

import PackageDescription

let package = Package(
name: "TestSPMLibrary",
products: [
.library(
name: "TestSPMLibrary",
type: .dynamic,
targets: ["TestSPMLibrary"]),
],
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.0.0"),
],
targets: [
.target(
name: "TestSPMLibrary",
dependencies: ["Alamofire"]),
.testTarget(
name: "TestSPMLibraryTests",
dependencies: ["TestSPMLibrary"]),
]
)

In this library the code you want to interface with has to be declared public (and objects need a public initializer).

My "TestSPMLibrary.swift" example:

public struct Blah {
public init() {}
public var text = "Hello, World!"
}

Build the library:

$ swift build

Launch the REPL with swift -I .build/debug -L .build/debug -l and add the library name. In my case:

$ swift -I .build/debug -L .build/debug -lTestSPMLibrary

In the REPL you can now import your library (and its dependencies):

import TestSPMLibrary
import Alamofire

let x = Blah()
print(x.text)

Python's dir() and help() equivalents in Swift REPL

Swift doesn't have the methods like help() but you can use the lldb commands.
you can input : in Swift REPL for the shell to switch to LLDB mode.

Can I see the list of object methods in the shell (REPL)?

type lookup ClassNameOfInstance

Can I get the list of currently declared variables?

image lookup -rs lldb_expr

Can I read object reference in the shell?

expression -l swift -- instanceName

use c command to exit LLDB mode.

addition:

  • When you define a variables in Swift REPL, Swift Repl make modules such as $__lldb_expr2, $__lldb_expr3 for each.

  • If you would like to know lldb commands, you can use help command in lldb mode.



Related Topics



Leave a reply



Submit