投稿

Courseraの"Create the User Interface with SwiftUI"に入門した話。

イメージ
Create the User Interface with SwiftUI タイトル通り、Courseraの以下のコースに入門しました。 Create the User Interface with SwiftUI 参考本を一通り復習し終わったが、いまいち全体的な開発サイクルを理解できなかったのでSwiftUI周りの開発をどのように進めていくのかを実践的に勉強できるコースを探していたところ、Metaが提供しているコースがあったので入門したという流れ。 今日の0時ごろに登録して1時間半くらい軽く進めて"Setting up SwiftUI"を完了したのでそこで学んだことを備忘的に残しておく。 Appleのデバイスには一般的なコンピューター(MacBook,iMacなど)とタッチデバイス(iPhone,Apple Watchなど)に大別される。 上記のうち前者は操作の精度が高いが、後者はディスプレイの小ささなどから捜査の精度が低い。よってデバイス上に表示される情報はシンプルに、そして情報量を制限するべきである。 気になる人は Human Interface Guideline 見てね!とのこと。 また、UI的に配色にも注意する。例として挙げられていたのはボタンの配色が全体的に暗いと分かりにくいから操作しやすいように明るい配色にしよう!みたいな話。 SwiftUIの利点 ダイナミックテキスト(デバイスごとに表示されるテキストのサイズ)が自動的にサポートされていること アクセシビリティ(障がい者向けの対応)やローカライゼーション(異なる言語区分への対応)などがしやすいこと ライトテーマやダークテーマに対応が容易なこと 宣言的(Declarative)シンタックスと命令的(Imperative)シンタックスの違い Declarative = WHAT you want つまり結局何がしたいのかに集約される。(ハンバーガーを注文するときにハンバーガー下さい。で通用する) Imperative = HOW you want どのように用意するのかに集約される。(ハンバーガーを注文するときにパンを用意して、トーストして、肉を焼いて、etc...したものを下さいというようなもの) つまりDeclarativeは処理を書けばマシン側で自動的に最適化をして欲しいもの...

LeetCodeのEasy問題を解いて勉強するSwift Invert Binary Tree編

イメージ
LeetCodeのEasy問題を解いて勉強するSwift Invert Binary Tree編 新しくSwiftを触ることになりそうなので ひとまずコードを書いてみることにする。 LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。 書いている人のレベル感 Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。 LeetCode お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。 問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。 前回 LeetCodeのEasy問題を解いて勉強するSwift Binary Search編 Invert Binary Tree Invert Binary Tree 与えられたバイナリツリーをInvert(反転)させて root を返す関数を書く。 /** * Definition for a binary tree node. * public class TreeNode { * public var val: Int * public var left: TreeNode? * public var right: TreeNode? * public init() { self.val = 0; self.left = nil; self.right = nil; } * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; } * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) { * self.val = val * self.left = left * self.right = right * } * } */ class Solution { func invertTr...

LeetCodeのEasy問題を解いて勉強するSwift Binary Search編

イメージ
LeetCodeのEasy問題を解いて勉強するSwift Binary Search編 新しくSwiftを触ることになりそうなので ひとまずコードを書いてみることにする。 LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。 書いている人のレベル感 Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。 LeetCode お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。 問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。 前回 LeetCodeのEasy問題を解いて勉強するSwift Valid Parentheses編 Binary Search Binary Search 与えられた配列(数値が入っている)にtargetが存在する場合はその数値が存在するインデックスを、存在しない場合には -1 を返す関数を書く。 class Solution { func search ( _ nums : [ Int ] , _ target : Int ) - > Int { var left = 0 var right = nums . count - 1 while left <= right { let mid = left + ( right - left ) / 2 if nums [ mid ] == target { return mid } else if nums [ mid ] < target { left = mid + 1 } else { right = mid - 1 } } return - 1 ...

LeetCodeのEasy問題を解いて勉強するSwift Valid Parentheses編

イメージ
LeetCodeのEasy問題を解いて勉強するSwift Valid Parentheses編 新しくSwiftを触ることになりそうなので ひとまずコードを書いてみることにする。 LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。 書いている人のレベル感 Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。 LeetCode お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。 問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。 前回 LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編 次回 LeetCodeのEasy問題を解いて勉強するSwift Binary Search編 Valid Palindrome Valid Parentheses 与えられた文字列の括弧の種類と数がイコールであるかを判定する関数を書く。 class Solution { func isValid ( _ s : String ) - > Bool { var stack : [ Character ] = [ ] for c in s { switch c { case "(" : stack . append ( ")" ) case "{" : stack . append ( "}" ) case "[" : stack . append ( "]" ) default : guard c == stack . popLast ( ) else { return false } } ...

LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編

イメージ
LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編 新しくSwiftを触ることになりそうなので ひとまずコードを書いてみることにする。 LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。 書いている人のレベル感 Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。 LeetCode お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。 問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。 前回 LeetCodeのEasy問題を解いて勉強するSwift Two Sum編 次回 LeetCodeのEasy問題を解いて勉強するSwift Valid Parentheses編 Valid Palindrome Valid Palindrome 与えられた文字列が回文であるかを確認する関数を書く。 いわゆるTwo Pointerで解く。 最初ループ処理をrepeat while文で書いていたけどwhile文でも書けるんだっけ?となって書き直した。 そもそもrepeat while文とwhile文の違いってなんぞや?となったので調査。 repeat while →ループ条件に関わらずループ処理を一回だけ 必ず 実行する『while文』」 while →ループ条件を確認し、 条件に合致した場合にのみ ループ処理が行われる。 class Solution { func isPalindrome ( _ s : String ) - > Bool { if s . isEmpty { return true } let StringArray = Array ( s ) var pointer_1 = 0 var pointer_2 = s . count - 1 // 前からのポインターと後ろからのポイン...

LeetCodeのEasy問題を解いて勉強するSwift Two Sum編

イメージ
LeetCodeのEasy問題を解いて勉強するSwift Two Sum編 新しくSwiftを触ることになりそうなので ひとまずコードを書いてみることにする。 LeetCodeのEasy問題は比較的解き方を知っている(はず)なので、Python3で書いていた部分をどのような書き方に直すのかを色々思い出しつつ試行錯誤していく。 書いている人のレベル感 Swiftビギナー。基本的な文法すらあやふやなので始めて数日レベルと言っても過言ではない。 LeetCode お題が与えられ、その内容に合わせてコードを書き、提出して合ってるかどうかを確認できる。 問題はソフトウェアエンジニアのコーディング面接で出されたお題をそのまま引用していることがほとんど。 次回 LeetCodeのEasy問題を解いて勉強するSwift Valid Palindrome編 Two Sum Two Sum LeetCodeを始めた大多数の人が恐らく一番最初に解くであろう問題。 一番簡単な二重for文で書いた場合。 ただし遅い。 class Solution { func twoSum ( _ nums : [ Int ] , _ target : Int ) - > [ Int ] { for i in 0 . . < nums . count { for j in i + 1 . . < nums . count { if nums [ i ] + nums [ j ] == target { return [ i , j ] } } } return [ ] } } 速度を改良した書き方の場合。 class Solution { func twoSum ( _ nums : [ Int ] , _ target : Int ) - > [ Int ] { var seen = [ Int : Int ] ( ) ...

'Cannot preview in this file -- active scheme does not build this file. 'を解決した話

イメージ
'Cannot preview in this file – active scheme does not build this file. ’ 問題 新しくデスクトップに作ったSwiftUIプロジェクトを触ろうと思ったらこのメッセージが出てプレビューが停止した。 再起動しても現象が直らなかったので改めて原因を調査したので備忘。 原因 プロジェクトをiCloudドライブに保存していたから発生していた。 遥か昔に同じ現象に陥っていた人がおり、 公式のフォーラムに質問 していたので同様の対策を(iCloudドライブに保存されないように)して起動したら問題が解決した。