As the question states, compiling and running the 2 files below makes the compiler hang indefinitely. Here are the CLI commands I have tried:
swiftc *.swift -o combined && ./combined
and cat *.swift | swift -
.
The only 2 swift files in the directory are main.swift
and Vehicle.swift
.
I have tried compiling and running both files separately, Vehicle.class
has no errors and compiles properly, main.swift
has a error: cannot find 'Vehicle' in scope
error, which is understandable since I need to compile them together. There is no other feedback from the compiler. What can cause the compiler to hang?
Code:
main.swift
// Stub program to demonstrate the Vehicle class
let vehicle1 = Vehicle(newNumOfDoors: 4, newMaxSpeed: 150,
newLicensePlate: "ASDF404", newColour: "Red")
vehicle1.licensePlate = "FGHJ968"
vehicle1.colour = "Green"
vehicle1.accelerate(accelerateBy: 60)
print("\nLicense Plate: " vehicle1.licensePlate
"\nColour: " vehicle1.colour
"\nNumber of Doors: " vehicle1.numOfDoors
"\nMax Speed: " vehicle1.maxSpeed
"\nCurrent Speed: " vehicle1.speed)
Vehicle.swift
public class Vehicle {
// Properties Declaration
let numOfDoors: Int
let maxSpeed: Int
private(set) var speed: Int
var licensePlate: String
var colour: String
// Initializes a Vehicle
init (newNumOfDoors: Int, newMaxSpeed: Int,
newLicensePlate: String, newColour: String) {
self.numOfDoors = newNumOfDoors
self.licensePlate = newLicensePlate
self.maxSpeed = newMaxSpeed
self.colour = newColour
self.speed = 0
}
func accelerate(accelerateBy: Int) {
self.speed = accelerateBy
}
func brake(brakeBy: Int) {
self.speed -= brakeBy
}
}
CodePudding user response:
The compiler is having issues with your print
statement (which I determined by removing elements from the program until it worked). This is likely because it's struggling to figure out the type when using
to concatenate everything.
One option is to use a multi-line string literal:
let vehicle1 = Vehicle(newNumOfDoors: 4, newMaxSpeed: 150,
newLicensePlate: "ASDF404", newColour: "Red")
vehicle1.licensePlate = "FGHJ968"
vehicle1.colour = "Green"
vehicle1.accelerate(accelerateBy: 60)
let str = """
License Plate: \(vehicle1.licensePlate)
Colour: \(vehicle1.colour)
Number of Doors: \(vehicle1.numOfDoors)
Max Speed: \(vehicle1.maxSpeed)
Current Speed: \(vehicle1.speed)
"""
print(str)
Another option is to use interpolation rather than the
:
print("\nLicense Plate: \(vehicle1.licensePlate)"
"\nColour: \(vehicle1.colour)"
"\nNumber of Doors: \(vehicle1.numOfDoors)"
"\nMax Speed: \(vehicle1.maxSpeed)"
"\nCurrent Speed: \(vehicle1.speed)")