2017-08-08 13 views
-2

Swift 3.1を使用していると思われるXCode 8.3.3を使用しますが、100%確実ではありません。ここに完全なコードがあります。私がこれをきれいなプレイグラウンドに貼り付けると、エラーは発生しないことに注意してください。しかし、Xcodeプロジェクト内、私はライン「せサイコロ=サイコロ(withArrayOfDie:arrayOfDie)」のビルドエラーを取得するユニットテストで:Swift/XCodeビルドエラー:[Die]型の値を予想される引数型[Die]に変換できません

let defaultFaceCount = 6 
let defaultDieCount = 6 

func randomInt(withMaxValue maxValue: Int) -> Int { 
    return Int(arc4random_uniform(UInt32(maxValue))) + 1 
} 

class Die 
{ 
    private let m_faceCount: Int  // Constant only set in init 
    private var m_faceValue: Int? 

    init(numFaces initialFaceCount: Int, withValue initialFaceValue: Int) { 
     // Make sure number of faces is greater than 0. 
     m_faceCount = (initialFaceCount > 0) ? initialFaceCount : defaultFaceCount 

     // Make sure face value is in proper range. 
     if initialFaceValue == 0 || initialFaceValue > m_faceCount { 
      m_faceValue = randomInt(withMaxValue: m_faceCount) 
     } 
     else { 
      m_faceValue = abs(initialFaceValue) 
     } 
    } 

    convenience init(numFaces initialFaceCount: Int) { 
     self.init(numFaces: initialFaceCount, 
        withValue: randomInt(withMaxValue: initialFaceCount)) 
    } 

    convenience init() { 
     self.init(numFaces: defaultFaceCount) 
    } 

    var faceValue: Int { 
     get { 
      return m_faceValue! 
     } 
    } 

    var faceCount: Int { 
     get { 
      return m_faceCount 
     } 
    } 

    func roll() { 
     // face values are 1 based! 
     m_faceValue = randomInt(withMaxValue: m_faceCount) 
    } 
} 

class Dice { 
    var m_dice: [Die] 
    var m_occurrencesOf: [Int] 

    // Init with a pre-initialized array of Die. Every Die in 
    // the array must have the same face count. 
    init(withArrayOfDie: [Die]) { 
     var faceCount = defaultFaceCount 
     if withArrayOfDie.isEmpty { 
      // If there are no dice, add defaults. 
      m_dice = [Die]() 
      for _ in 1...defaultDieCount { 
       m_dice.append(Die(numFaces: defaultFaceCount)) 
      } 
     } 
     else { 
      m_dice = withArrayOfDie 
      faceCount = m_dice[0].faceCount 
     } 
     // Keep trace of # of occurrences of each face value. 
     m_occurrencesOf = Array(repeating: 0, count: faceCount) 
     for die in m_dice { 
      m_occurrencesOf[die.faceValue - 1] += 1 
     } 
    } 

    // Init numDice dice, each with numFaces. 
    convenience init(numDice count: Int, numFaces faceCount: Int) { 
     var dice = [Die]() 
     for _ in 1...count { 
      dice.append(Die(numFaces: faceCount)) 
     } 
     self.init(withArrayOfDie: dice) 
    } 

    // Init defaultDieCount dice, each with defaultFaceCount faces. 
    convenience init() { 
     self.init(numDice: defaultDieCount, numFaces: defaultFaceCount) 
    } 

    var count: Int { 
     return m_dice.count 
    } 

    // Retrieve the die at the specified (0 based) index. 
    func die(atIndex index: Int) -> Die? { 
     if !m_dice.isEmpty && index >= 0 && index < m_dice.count { 
      return m_dice[index] 
     } 
     return nil 
    } 

    subscript(index: Int) -> Die? { 
     get { 
      return die(atIndex: index) 
     } 
    } 
} 

// Unit Test 
var arrayOfDie = [Die]() 
for i in 1...6 { 
    arrayOfDie.append(Die()) 
} 
let dice = Dice(withArrayOfDie: arrayOfDie) 
// XCTAssertEqual(6, dice.count) 

私はビルドエラーが「型の値を変換できません取得[ダイ]をダイス=ダイス(withArrayOfDie:arrayOfDie)の行で期待される引数型[Die]に設定します。 dieの配列である引数が、期待されるinit引数の型と一致しない理由を理解できません。

ありがとうございます! [ダイ]() `有効ではありません。

+0

()を取り除きます。 '()'を取り除く。 – rmaddy

+0

ありがとうrmaddy。これは元の投稿のタイプミスで、コードは実際には "var m_dice:[Die]()"ではなく、 "var m_dice = [Die]()"でした。 (タイプ注釈ではなく、長さ0の配列の最初の割り当てです)。 – Ratso

+0

*の*行でビルドエラーが発生した場合に役立ちます。編集:特にあなたのコードの私のコピー/貼り付けは、** no **ビルドエラーを生じます。 – dfd

答えて

0

は、ライン`のvar m_diceがvar m_dice: [Die]()

class Dice { 
    var m_dice: [Die] 
    init(withArrayOfDie dice: [Die]) { 
     m_dice = dice 
    } 
} 
+0

"var m_dice = [Die]()"と "var m_dice:[Die]"の両方を試しましたが、いずれの場合も同じエラーが発生します。前者は、m_diceが常に有効な配列を参照するようにしなければなりません。後者は型の注釈を使用するだけです。私は前者に対してはまだinit()でm_diceを変更できると推測します。後者は、init()でm_diceを初期化する必要があります。しかし、もう一度、どちらの方法でも私はまだエラーが発生します。あなたのお返事ありがとう! – Ratso

関連する問題