Swift,Objective-Cプログラミング ~ iOS ~

Objective-C,Swift,Apple Watchなどのプログラミング

【iOS Swift入門 #289】UILabelオブジェクトを複製・コピーする

はじめに

UILabelオブジェクトを複製したいということがあるかも、
ということでやりかたを調べた。

やりかた

NSKeyedArchiverクラスでNSDataにアーカイブし、
NSKeyedUnarchiverクラスで復元することで、
別のオブジェクトとしてUILabelが作成される

ソース

// Clone UILabel with Swift
extension UILabel{
    func clone() -> UILabel{
        let data = NSKeyedArchiver.archivedData(withRootObject: self)
        return NSKeyedUnarchiver.unarchiveObject(with: data) as! UILabel
    }
}

例:コンソールで確認

// Sample
let label = UILabel(frame: CGRect.zero)
let cloned = label.clone()
cloned.text = "cloned label"
label.text = "original label"

print("\(cloned.text)")  // cloned label

例:画面で確認

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        // original
        let original = UILabel(frame: CGRect.zero)
        original.backgroundColor = UIColor.black
        original.textColor = UIColor.white
        original.text = "This is original UILabel object"
        original.sizeToFit()
        original.center = view.center
        
        // copy
        let copied = original.clone()
        copied.text = "This is copied UILabel object"
        copied.sizeToFit()
        copied.center = CGPoint(x: original.center.x, y: original.center.y + 50.0)
        
        // add
        view.addSubview(original)
        view.addSubview(copied)
    }
}

extension UILabel{
    func clone() -> UILabel{
        let data = NSKeyedArchiver.archivedData(withRootObject: self)
        return NSKeyedUnarchiver.unarchiveObject(with: data) as! UILabel
    }
}

サンプルソースのダウンロード

こちらからダウンロード。
SampleCloneLabel.zip - Google ドライブ

参考情報

Swift

iOSアプリ開発未経験の人向け
・Swift初心者の人に評判が良いようですね


・わかりやすくていい、と聞いた本
立ち読みした感じだと【アプリ作成未経験の人向け】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】

絶対に挫折しない iPhoneアプリ開発「超」入門【Swift & iOS8.1以降 完全対応】


②を終えたくらいの知識の方向け
・アプリ開発独学中に2冊めに購入した書籍
プログラミング知識はなくても、若干理解するのに時間がかかる程度で、
読み進められるわかりやすさがある。

iPhoneアプリ開発塾

iPhoneアプリ開発塾


③中級者、上級者向け

詳解 Swift

詳解 Swift

詳解 Swift 改訂版

詳解 Swift 改訂版