简体   繁体   中英

Compiler hangs indefinitely while compiling multiple files - Swift 5.5 Release

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 - 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
    }
}

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)")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM