Swift愛好会vol18に参加してきました!
Swift愛好会vol18に参加してきました!
https://love-swift.connpass.com/event/51614/
こういう勉強会的なものに参加するの自体が初めてで緊張しましたが、 ひとつの経験として参加してきました。
感想
発表内容としてはレベルが高すぎた、、、、 Swift初心者の自分としては内容についていけませんでした、、、
会場の雰囲気はすごく明るくわいわい楽しい雰囲気でした。(ビールも飲みながらなので)
MacBookProを使用している方が多くかなり羨ましかった、、、 (私はMacbookAir 13-inch, Early 2015 をカスタマイズなしで使用しています。)
内容
談義ということで発表者が前で発表し、聞いている側はTwitterのハッシュタグ「#love_swift」をつけて呟く形式で進めていました。
発表資料
*自社コンテンツ配信 のためのWebView Tips https://speakerdeck.com/gentlesoft/zi-she-kontentupei-xin-falsetamefalsewebview-tips
*Swift4で何が変わりそうなのか(2) https://speakerdeck.com/d_date/swift4dehe-gabian-warufalseka-2
*Assertion https://speakerdeck.com/nhamada/assertion-at-swift
*Swiftと関数型プログラミングの遺産-他人のスライドで発表する- https://speakerdeck.com/bannzai/implementation-for-promise-using-nested-generics
こういうのももっと参加していきたいなー その前に自分のSwift力を上げなければ、、、、、
キーボードでEnterを押すと画面をキーボードが閉じるようにする
Swiftではなにも実装しないとEnterを押してもキーボードが閉じません
そこで以下のように実装します
import UIKit class ViewController: UIViewController , UITextFieldDelegate{ @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //デリゲートを設定 textField.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //このメソッドを書くとキーボードを閉じれるようにnarimasu func textFieldShouldReturn(_ textField: UITextField) -> Bool{ // キーボードを閉じる textField.resignFirstResponder() return true } }
しかしこの方法だと少し問題あり、、、、
UITextFieldを使うたびに毎回以下のメソッドを書くのはめんどくさいですね、、、
//このメソッドを書くとキーボードを閉じれるようにnarimasu func textFieldShouldReturn(_ textField: UITextField) -> Bool{ // キーボードを閉じる textField.resignFirstResponder() return true }
同じことを繰り返させないようにすることに全力を出すのがプログラマーです。 そこで以下のように実装しましょう
自動生成されるViewControllerはお便利メソッドを置いておくクラスとする
ViewController
import UIKit class ViewController: UIViewController , UITextFieldDelegate{ var textFieldDelegate: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. } func textFieldShouldReturn(_ textField: UITextField) -> Bool{ // キーボードを閉じる textField.resignFirstResponder() return true } }
これを作成し、Main.storyboardの画面ごとに新しくViewControllerクラスを作成し、先ほど作成したViewControllerに継承?させます
MainViewController
import UIKit //先ほど作成したViewControllerクラスを継承させる class MainViewController: ViewController{ @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //アウトレット接続したUITextFieldにデリゲートをセットさせる textField.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
以上です。 これ同じメソッドを何回も書く必要はなくなりました。
私はこのViewControllerクラスに画面遷移するメソッドなどよく使う機能はここに書いて呼び出すようにしています。 ViewControllerが肥大化すると可読性がさがるので、、
ブラックアウトステッカー for Mac を買ってみた
自分プログラミングをするときタイピングがすごく遅くなるので これを練習目的で買ってみました。
また、私が尊敬する「増井雄一郎さん」(@masuidrive)も使用していて、 真似しました。笑
手触り
とても良いです!!!! 滑らかで、これを貼ったからといってキーボードが打ちにくくなるということはありません!
また、Macのキーボードも保護することもできますので一石二鳥ですね。
なにより、かっこいい
はい、かっこいいです。 Macbookを購入するときに無刻印にするオプションとかあればいいな〜と思います。
タイピングに関して
正直まだ慣れません、、、、、 タイピングって無刻印にしただけでこんなに難しくなるのだと感じます。
ブラインドタッチができると思っていても、無意識のうちにキーボードをみているんですかね、、
商品について
商品はアマゾンで買うことができます。 私は、Macbook air 13inch を使用していますが、 USキーボード用や、Macbook、新型MacbookProなどのバタフライキーボード(キーボードが薄いやつ)に対応しているものもあるようです。
↓私が購入したもの
↓US配列
↓バタフライキーボード用
もろもろ
Androidで画面にデータを表示するときに注意
TextViewなどで画面にデータを表示する場合
全てString型に変換する必要があります!!!
Button submit = (Button)findViewById(R.id.submit); submit.setText("ここは必ずStrin型!!!");
以下はエラーになります。
int num = 3: Button submit = (Button)findViewById(R.id.submit); submit.setText(num);
どうやら、リソースIDと勘違いして「そんなリソースIDはないよー」っていうエラーを出すようです。。。。。
以下のように実装しましょう
int num = 3: Button submit = (Button)findViewById(R.id.submit); submit.setText(String.valueOf(num));
今日かなりハマりました。。。。。。
画面遷移する前に制御する[Swift]
画面遷移する前に制御する[Swift]
Swiftでは画面遷移する前に入力バリデーションチェックしたり、遷移先の画面にデータを渡したしするすることができます。
画面遷移する前に以下のメソッドを呼び出す
override func shouldPerformSegue(withIdentifieridentifier: String, sender: Any?) -> Bool
falseを返したときは画面遷移させずにtrueを返したときだけ画面遷移します。
以下のサンプルソースのコメントを使って解説します。
class ViewController: UIViewController { @IBOutlet weak var textField: UITextField! 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. } //下記のメソッドを追加する override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool { //データが空の場合は画面推移しない if textField.text == ""{ return false } //trueを返したときだけ画面遷移する return true }
値を次の画面に渡したい場合もこのメソッドの中でデータをセットすればよいということになります。
以上です。