オープンデータとプログラミング

swift

Swift|変数の定義letとvarの違い

swift

Swiftでは変数を定義するときのキーワードに、letvarがあります。letvarには次のような違いがあります。

キーワード 意味
let 一度定義した変数の内容を変更しない let hogestring=”変更不可”
var 一度定義した変数の内容を変更できる var hogestring=”変更可”

varだけあれば、用は足りると思われるかもしれません。

letが用意されている理由のひとつは、「ソースコードが読みやすくなるから」でしょう。

letで定義された変数は、「変更されないんだな」と一目でわかりますよね。

Swift| AdMob組み込み時のエラー「Type “ViewController” does not confirm to protocol ‘GADBannerViewDelegate’」の対処方法

Xcode

こんにちは。

Type “ViewController” does not confirm to protocol ‘GADBannerViewDelegate’

import UIKit
import GoogleMobileAds

class ViewController: UIViewController {

	<中略>

	override func viewDidLoad() {
		<中略>

	        //AdMob
        	var bannerView: GADBannerView = GADBannerView();
        	bannerView = GADBannerView(adSize:kGADAdSizeBanner);
        	bannerView.adUnitID = "ca-app-pub-****************/**********";   //広告ユニットID
        	bannerView.delegate = self; //delegatを指定 ※ここでビルドエラー発生
        	bannerView.rootViewController = self;
        	self.view.addSubview(bannerView);
        	bannerView.loadRequest(GADRequest());
        	
        	
	}	
	
}

この問題は、ViewControllerクラスにプロトコルを指定するのを忘れているため発生します。

プロトコル、”GADBannerViewDelegate”を追加してやります。

class ViewController: UIViewController ,GADBannerViewDelegate { //※プロトコルを指定すればOK

	<中略>

	override func viewDidLoad() {
		<中略>

	        //AdMob
        	var bannerView: GADBannerView = GADBannerView();
        	bannerView = GADBannerView(adSize:kGADAdSizeBanner);
        	bannerView.adUnitID = "ca-app-pub-****************/**********";   //広告ユニットID
        	bannerView.delegate = self; //delegatを指定 ※ビルドエラーが解消!
        	bannerView.rootViewController = self;
        	self.view.addSubview(bannerView);
        	bannerView.loadRequest(GADRequest());
        	
        	
	}	
	
}

これでビルドエラーが解決しましたか?

Xcode|Swift|@IBOutletのビックリマーク(!)の意味は!?

Xcode

こんにちは。

ストーリーボードで、コントロールと紐付けをしてあげると以下のようなコードが自動的に挿入されます。

変数の最後(行末)に感嘆符(!)が付いていますが、これはいったい何者でしょうか?

@IBOutlet var yourAge:UITextField! 

これは、yourAgeOptional型だということを意味しています。

つまり、yourAgeは、『空(nil)を許容しますよ』ということです。

もう少し詳しく知りたい方は、Optional型、アンラップ(unwrap)などのキーワードで検索してみてくださいね。

Xcode:didReceiveMemoryWarning() メソッドとは?

Xcode

didReceiveMemoryWarning() メソッドは、警告を受け取ったときに呼ばれるメソッドです。

画像ファイルなど、使用している大きなメモリ領域を解放します。

メモリ警告を無視するとアプリが異常終了する場合があります。

iOSシミュレーターにも、メモリ警告のシミュレート機能が備わっているので、テスト時に確認しておくと安心ですね。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

didReceiveMemoryWarning() メソッドについては、以下の本に詳しく書かれています。

より詳しく勉強してみたい方は読んでみてはいかがでしょうか。

Xcode:nibファイルって何よ?

Xcode

nibファイルは『ニブファイル』と読みます。
iOSアプリの開発がはじめての方が、理解しにくいnibファイルについて解説します。

概要

nibファイルとは、簡単にいってしまうとボタンなどのUI要素の描画情報が記述されたファイルのことです。

iOSアプリの開発作業は、「プログラムコードの記述」と「UIの作成」の二つに大別できます。通常は「UIの作成」はInterface Builder(IB)※を使用してUIを作成する作業を行います。このIBで作成されたUI要素の描画情報がnibファイルに格納されます。

※以前はXcodeとは独立したアプリでしたが、現在ではXCodeに統合されています

名前の由来

拡張子は.nibです。この拡張子が呼び名の由来です。
nibはNeXTStep Interface Builderの頭文字からとったものです。

ストーリーボードファイルとの関係

UI要素の描画情報はストーリーボードファイル(Storybordファイル)に格納されているのでは?と思うかもしれません。実は、ストーリーボードファイル(Storybordファイル)の正体は、複数のnibファイルを一つにまとめたものです。

ViewControllerとの関係

アプリ(ViewController)が起動されるときに、nibファイルからUI要素の描画情報が読み込まれ、インスタンス化され、起動直後の画面が描画されます。

ViewController.swiftviewDidLoad()メソッドには、

Do any additional setup after loading the view, typically from a nib.

とコメントが記載されています。

「ボタンなどのUI要素がnibファイルからロードされ、インスタンス化されたらあとは
 あなたが設定等を自由に記述してくださいね」、

ということです。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

viewDidLoad()の中でプログラムを記述することによって、UI要素の色を変えたり、ボタンを追加したりすることができるわけですね。

nibファイルについては、以下の本に詳しく書かれています。

より詳しく勉強してみたい方は読んでみてはいかがでしょうか。