【问题标题】:Expected Declaration Error in Swift When Accessing A Class Function访问类函数时 Swift 中的预期声明错误
【发布时间】:2016-02-23 23:33:33
【问题描述】:

我是编码新手,正在尝试了解类在 Swift 中的工作方式。我在 Xcode 7.2.1 中编写了以下代码并收到错误“预期声明”,它指向行中的第一个字符 myFirstCar.refuel().

    import UIKit

    class ViewController: UIViewController {

        class Car {

            var weight:Int = 1200
            var gas:Int = 100
            var maxGas:Int = 1000 

            func refuel() {
                if gas < 900 {
                    gas += 100
                } else {
                    gas += (maxGas - gas)
                }
         }
    }

    let myFirstCar = Car()

    myFirstCar.refuel()

}

我希望这段代码在类中运行refuel() 函数。

我环顾四周,认为这是Car 类中函数初始化的问题。我已经尝试初始化类中的每个变量以及初始化函数,但我收到指向同一行的相同错误代码。

我现在认为在处理类时我可能会遗漏一些不同的基本规则。

例如,我不知道class ViewController: UIViewController 是否存在问题,因为我的class Car 包含在其中,并且可能使Car 类成为ViewController 的子类?

就像我说的,我环顾四周并在网上找到了这段代码,它与我的基本相同。

class Tank {
    class var bonusDamage: Double {
        return Double(Upgrade.level) * 2.5
    }

    let baseDamage = 10.0
    var damage: Double {
        return self.baseDamage + Tank.bonusDamage
    }

    class func upgrade() {
        Upgrade.level += 1
    }

    struct Upgrade {
        static var level = 0
    }
}

var tank = Tank()

println(tank.damage)
// 10.0

Tank.upgrade()

println(tank.damage)
// 12.5

Tank.upgrade()

println(tank.damage)
// 15.0

如果我将代码复制并粘贴到 Xcode 中,它会在该行给出相同的错误“预期声明”:

println(tank.damage)
// 10.0

我想我真正的问题是我不明白这个错误。如果有人能指出我寻找答案的方向,那将不胜感激!

【问题讨论】:

  • 问题是 Car 类不应该嵌套在 ViewController 类中。理想情况下,将其移出到自己的文件Car.swift。您似乎也在使用旧版本的 Swift,因为 println 已被弃用。

标签: ios xcode swift swift2


【解决方案1】:

问题出现是因为你在错误的地方调用了一个函数:

myFirstCar.refuel()

同样适用于:

println(tank.damage)
// 10.0

Tank.upgrade()

println(tank.damage)
// 12.5

Tank.upgrade()

println(tank.damage)
// 15.0

必须在func 范围内调用它;例如:

override func viewDidLoad()
{
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    myFirstCar.refuel()

    /* 

    println(tank.damage)
    // 10.0

    Tank.upgrade()

    println(tank.damage)
    // 12.5

    Tank.upgrade()

    println(tank.damage)
    // 15.0
    */
}

顺便说一句,如果您使用的是 Swift 2,println 已重命名为 print

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2015-07-02
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多