【问题标题】:My first swift hello world application, build error when trying access a class我的第一个 swift hello world 应用程序,尝试访问类时生成错误
【发布时间】:2014-06-20 12:26:06
【问题描述】:

所以这是我的 Swift 的 hello world 应用程序。也不习惯XCode。所以,这里可能是一个愚蠢的错误。

我只有一个类 Deck.swift

class Deck {

    let decks : Integer = 0

    init () {
       decks = 1
    }

    init (amountOfDecks : Integer){
       decks = amountOfDecks
    }

    func getAmountOfCards() -> Integer {
        return 0
    }

}

然后我尝试运行一个看起来像这样的单元测试

import XCTest
import helloWorldv2

class helloWorldv2Tests: XCTestCase {

    override func setUp() {
        super.setUp()

    }

    override func tearDown() {
        super.tearDown()
    }

    func testDeckConstructor() {
        var deck = Deck(amountOfDecks: 2)
        XCTAssert(true, "Pass")
    }

    func testExample() {
        // This is an example of a functional test case.
        XCTAssert(true, "Pass")
    }

}

如果我注释掉 var deck = Deck(amountOfDecks: 2) 行,那么它构建得很好。如果包含该行,我将构建失败。

有人知道我在这里做错了什么吗?

【问题讨论】:

  • 因为没有一个参数的构造函数。 init 在 swift 中不被视为构造函数。
  • 你能发布构建错误吗?
  • 当我在虚拟 Iphone 上构建它时它工作了

标签: iphone swift ios8 xcode6


【解决方案1】:

如果你想修改甲板参数,你必须像这样声明它

var decks : Int = 0

如果你让你的变量在第一次赋值后只读。

【讨论】:

    【解决方案2】:

    虽然@jaumard 说您应该使用 var 而不是 let 是正确的,但您应该使用“Int”作为类型,而不是“Integer” "(这是一种协议,而不是一种类型)。你侥幸逃脱,因为由于类型推断,两者都是多余的......

    var decks = 0
    

    足够了,或者

    var decks: Int = 0
    

    如果你想冗长。

    this answer

    【讨论】:

      【解决方案3】:

      无需将let 常量转换为var。 声明时不要提供默认值。

      let decks : Int
      

      您的 = 0 已经初始化了您的常量,并且您尝试在 init 中更改它,而常量不允许这样做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-03
        • 2015-07-19
        • 2018-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多