質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Swift

    7239questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS

    3995questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swiftでインスタンスのコピーを作りたい

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 513

Kenny

score 8

現在Swift3を使っています。
SwiftではClassは参照渡しが基本だと思います。

class MyClass {
    var a = 1
    var b = 2
}

var myClass1 = MyClass()
var myClass2 = myClass1
myClass2.a = 100
print(myClass1.a) // => 100

myClass1の複製を作成し、その複製インスタンスの一部だけをmyClass1に影響を与えずに編集したいのですが、どのようにすればよいでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

複製する関数を自作してください。

class MyClass {
    var a = 1
    var b = 2
    func copy() -> MyClass {
        let instance = MyClass()
        instance.a  = self.a
        instance.b  = self.b
        return instance
    }
}

var myClass1 = MyClass()
myClass1.a = 99
myClass1.b = 999
var myClass2 = myClass1.copy()
myClass2.a = 100
print(myClass1.a, myClass1.b) //=> 99 999
print(myClass2.a, myClass2.b) //=> 100 999

クラスにする必要がないならtyobigoroさんの方法が良いと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/29 10:45

    お礼が遅れてすみません。
    今回はクラスにする必要がありましたので、fuzzballさんの回答をベストアンサーに選ばせていただきました。
    ありがとうございます!
    案外クラスをコピーするって面倒ですね。。
    C言語出身の自分としては、memcpy的に簡単に出来ると思っていたもんで。

    キャンセル

+2

要望にあわなかったらすいません。(一部だけ?)

struct MyClass {
    var a = 1
    var b = 2
}

var myClass1 = MyClass()
var myClass2 = myClass1
myClass2.a = 100
print(myClass1.a) // => 1

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/29 10:46

    回答ありがとうございます!
    お礼が遅れてすみません。
    今回は既存のクラスで使いたかったのですが、確かに構造体はコピー渡しですからこのやり方はありますね。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    アルバムで選んだ写真の処理

    前提・実現したいこと 環境は Xcode7.3 swift iOSでフォトライブラリから画像を取得する方法 Swiftでカメラロールから写真データを保存する話 を参

  • 解決済

    UIButton not working

    現在 UIViewControllerの上に、 let collectionView = UICollectionView() let collectionViewCell

  • 受付中

    カメラアクセスと写真のアップロードができない

    作ったアプリでカメラアクセスと写真のアップロードができません。 Xcodeから自分のiPhoneでエミュレータを起動したのですが Camera access ボタンとPhoto

  • 解決済

    viewdidload時に作った変数を関数で使用する方法

    前提・実現したいこと viewdidload()内で定義した変数を他の関数で使用しようとするとその変数は定義されていないと表示されます。どなたか解決方法を教えてください。 fu

  • 解決済

    swift3のテストプログラムについて

    swiftのテストプログラムについて つい先日、swiftを学び始めて、途切れ途切れで書いたプログラムなのですが やはりエラーが出てしまいました。Xcode8で書いたコード

  • 受付中

    swiftで画面遷移後、値が更新されない

    swiftでの画面遷移で値が更新されていない状態で渡されてしまっています。 具体的に言うと、MemberViewcontrollerのString型のname1,2,3,4をVie

  • 解決済

    for in stride の使い方

     分からないこと 素数を取り出すプログラムで、for in strideを使って繰り返し処理を行いたいのですが、うまくいきません。 処理としては配列Aから、2〜100の倍数を取り除

  • 解決済

    Swift TabBarControllerでWebサイトを表示させる際、タブをタップする度にWeb...

     前提・実現したいこと Swift初心者で、こちらで質問させて頂くのも初めてです。宜しくお願い申し上げます。 TabBarControllerを使って、タブをタップすると設定したW

同じタグがついた質問を見る

  • Swift

    7239questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS

    3995questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。