
iOS, iPhone, swift, xcode
Swift|変数の最後にあるクエスチョンマークやビックリマークの意味は?
by opendata •

こんにちは。
Type “ViewController” does not confirm to protocol ‘GADBannerViewDelegate’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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”を追加してやります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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()); } } |
これでビルドエラーが解決しましたか?
こんにちは。
ストーリーボードで、コントロールと紐付けをしてあげると以下のようなコードが自動的に挿入されます。
変数の最後(行末)に感嘆符(!)が付いていますが、これはいったい何者でしょうか?
1 | @IBOutlet var yourAge:UITextField! |
これは、yourAgeがOptional型だということを意味しています。
つまり、yourAgeは、『空(nil)を許容しますよ』ということです。
もう少し詳しく知りたい方は、Optional型、アンラップ(unwrap)などのキーワードで検索してみてくださいね。
didReceiveMemoryWarning() メソッドは、警告を受け取ったときに呼ばれるメソッドです。
画像ファイルなど、使用している大きなメモリ領域を解放します。
メモリ警告を無視するとアプリが異常終了する場合があります。
iOSシミュレーターにも、メモリ警告のシミュレート機能が備わっているので、テスト時に確認しておくと安心ですね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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() メソッドについては、以下の本に詳しく書かれています。
より詳しく勉強してみたい方は読んでみてはいかがでしょうか。
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)が起動されるときに、nibファイルからUI要素の描画情報が読み込まれ、インスタンス化され、起動直後の画面が描画されます。
ViewController.swiftのviewDidLoad()メソッドには、
Do any additional setup after loading the view, typically from a nib.
とコメントが記載されています。
「ボタンなどのUI要素がnibファイルからロードされ、インスタンス化されたらあとは
あなたが設定等を自由に記述してくださいね」、
ということです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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ファイルについては、以下の本に詳しく書かれています。
より詳しく勉強してみたい方は読んでみてはいかがでしょうか。
xcodeの右側の部分です。
上の画像の右側の赤い線で囲んだ部分です。
ユーティリティエリアは特に臥煙を設計する場合に各種コントロールを表示したり、各コントロールのパラメータが変更できるように設計されています。
ツールバーを選択することにより、各エリアを表示させたり非表示にしたりして、画面の小さなMacでも快適にプログラムを作成できるように配慮されています。