68390


UITextFieldにて入力された数字の個数だけインスタンスを生成するコードを書きたいと思っています．  
for文を使って作成しようとしておりますが，うまく回っておりません．  
どなたか教えていただけますでしょうか.よろしくお願いいたします．

ほとんどかけておりませんが以下がサンプルコードになります．

[code]

    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            let testText:UITextField!
            testText = UITextField(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
            testText.placeholder = "1~6"
            testText.keyboardType = .numberPad
            testText.clearButtonMode = .always;testText.borderStyle = .roundedRect
            testText.returnKeyType = .done
            self.view.addSubview(testText)
    
            number = Int(testText.text!)
            for i in 0..<number{
               //この中身がかけておりません
               //let (クラス名+i番目) = (クラス)
               //のような形で書きたいと思っています．
            }
        }
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            self.view.endEditing(true)
        }
    }
    
[/code]


CC BY-SA 4.0
2020-07-07T07:29:44.093
68361
2020-07-08T11:32:45.677
2020-07-08T11:32:45.677
3060
17131
question
swift
Swiftにおいてインスタンスを複数個生成したい


コメントでnaganosoftwareさんが仰る様に、遷移によって破棄されない場所に

[code]

    internal var players: [クラス名] = Array()
    
[/code]

と宣言しておき、`for`ループの中では

[code]

    let player = クラス名()
    (playersをメンバーに持つクラスのインスタンス).players.append(player)
    
[/code]

として全員分のインスタンスを配列に入れてしまうしかないと思います。  
アクセス方法は`players[index]`やプレイヤーのターンが順番でしか決まらないなら

[code]

    for player in players {
        // ターンが来たプレイヤーのインスタンスへの処理
    }
    
[/code]

で、出来ますし、配列をプレイヤーのターン順でソートしなおせばターン順の変更も容易です。

プレイヤー名をメンバーに持ち、名指しでどのプレイヤーのターンか？が決まるなら

[code]

    internal var playerByName: [String: クラス名] = Dictionary()
    
[/code]

を`players`を宣言した次の行に記載しておき、`player`の名前が決まった際に

[code]

    for player in players {
        let playerName = プレイヤー名を取得する関数()
        player.name = playerName
        (playersをメンバーに持つクラスのインスタンス).playerByName[playerName] = player
    }
    
[/code]

として、`player名`に各`player`インスタンスを対応付ければ  
`playersByName[player名]`でインスタンスにアクセス出来ます。

この場合一つ注意すべきは、`playersByName[player名]`で一致する名前のプレイヤーインスタンスを取り出そうとした時の戻り値がオプショナル型で帰ってくるので、適宜アンラップが必用なことです。


CC BY-SA 4.0
2020-07-07T23:31:53.397
68390
2020-07-08T08:08:54.537
2020-07-08T08:08:54.537
14745
14745
68361
answer