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引数の型と一致しない理由を理解できません。
ありがとうございます! [ダイ]() `有効ではありません。
に
()
を取り除きます。 '()'を取り除く。 – rmaddyありがとうrmaddy。これは元の投稿のタイプミスで、コードは実際には "var m_dice:[Die]()"ではなく、 "var m_dice = [Die]()"でした。 (タイプ注釈ではなく、長さ0の配列の最初の割り当てです)。 – Ratso
*の*行でビルドエラーが発生した場合に役立ちます。編集:特にあなたのコードの私のコピー/貼り付けは、** no **ビルドエラーを生じます。 – dfd