Swift

SwiftUI にComboboxがない。Pickerを使う

import SwiftUI struct ContentView: View { @State var selected = 0 @State var ItemList = ["apple", "orange", "lemon"] var body: some View { VStack { Text("Hello, World!") Picker(selection: $selected, label: Text("Please choose one")) { ForE…

NavigationLinkを使う

import SwiftUI struct ContentView: View { var body: some View { NavigationView { NavigationLink(destination: TestView()) { Text("Go Test View") } .navigationBarTitle("Top View") } Text("Hello, world!") .padding() } } struct TestView: View …

SwiftUIでチェック付きのListViewを作る

SwiftUIでチェック付きのListViewを作るのが大変でした。SwiftUI beta4 までOKだったのが Beta5でNGになったので、 検索で見つけたサンプルコードがビルドエラーに! 色々やって以下のコードに落ち着きました。 もっといい方法がありそうなんっだけど。なお…

Swiftで正規表現と文字列置換

Swiftで正規表現で特定のパターンを見つけて文字列置換をしてみました。 StringとNSString(前からあるやつ)があって使い分けが必要なのと、文字が何文字目かでマッチした文字を取り出すみたい。 func myMethod(_ inStr: String?) -> String? { guard let htm…

SwiftでXMLをパースする。ありがとうyahoojapan

XMLパーサーは、極論すると、これで終わる。簡単! github.com こんな感じ。 import SwiftyXMLParser if let path: String = Bundle.main.path(forResource: "hoge", ofType: "txt") { do { // ファイルの内容を取得する let content = try String(contentsO…

if let 変数 と guard let 変数

if let a = myFunc() {成功したらやること} else {失敗したらやること} なお、myFunc()は、成功時は値を返して、失敗時はnil(NULLのこと)を返すように実装する。 これで、通常動作と失敗時の動作が両方書ける。なお、失敗時はaにはnilが入る。 if guard let …

SwiftUIでコード内の文字をWebKitで表示してjavascriptの結果を受け取る

ContentView.swift import SwiftUI struct ContentView: View { var body: some View { WebView(url: URL(string: "dummy")!) } } WebView.swift import SwiftUI import WebKit struct WebView: UIViewRepresentable { var url: URL func makeUIView(context…

SwiftUIでローカルのindex.htmlをWebKitで読んでjavascriptの結果をSwiftコードで読む

ContentView.swiftを変更 import SwiftUI struct ContentView: View { var body: some View { WebView(url: URL(string: "dummy")!) } } WebView.swiftを新規作成 import SwiftUI import WebKit struct WebView: UIViewRepresentable { var url: URL func ma…

画面に図形を表示するには GeometryReaderとPath

(4) 画面に図形を表示するには (4.1) 四角を表示、大きさはおまかせ struct ContentView : View { var body: some View { VStack { Text("Hello There!") Rectangle().fill(Color.blue) }.frame(width: 150, height: 100).border(Color.black) } } (4.2) 四…

SwiftUIでURLを入力してボタンを押したらWEBページを表示する

ContentView.swift import SwiftUI struct ContentView: View { @State var workUrl: String = "" @State var fixedUrl: String = "https://www.google.com/" var body: some View { VStack(alignment: .leading) { TextField(" Enter Url (例 https://apple…

SwiftUIでWEBブラウザを作るには

WebView.swiftを新しく作る import SwiftUI import WebKit struct WebView: UIViewRepresentable { var url: URL func makeUIView(context: Context) -> WKWebView { return WKWebView(frame: .zero) } func updateUIView(_ uiView: WKWebView, context: Con…

SwiftUI プレビュー画面を作るには

(3) プレビュー画面を作るには (3.1) ContentView()の例 struct ContentView: View { // こっちは表示用 } // これでプレビューができる struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } (3.2) Landmar…

SwiftUIで画面に色々表示するには

(2) 画面に色々表示するには (2.1) ContentView()の例 struct ContentView: View { var body: some View { 「ここ」に書く } } (2.1.1) 表示の中身 struct ContentView: View { var body: some View { VStack { // 縦に並べる MapView() // 地図 CircleImage…

SwiftUIで最初に開く画面を決めるには

(1) 最初に開く画面を決める SceneDelegate.swiftの window.rootViewController = UIHostingController(rootView: 「ここ」) に書く。 // ContentView()を設定する場合 window.rootViewController = UIHostingController(rootView: ContentView()) // Landma…

ジェネリクス 型指定の引数

/* ジェネリクス 型指定の引数 */ func swapTwoInts(a: inout Int, b: inout Int) { let c = a a = b b = c } var p = 1 var q = 2 swapTwoInts(a: &p, b: &q) print("p = \(p), q = \(q)") func swapTwoValues<T>(a: inout T, b: inout T) { let c = a a = b b</t>…

イニシャライザ

/* イニシャライザ */ struct Color { // let red = 0.0, green = 0.0, blue = 0.0 // error: immutable value 'self.red' may only be initialized once let red, green, blue : Double init(red: Double, green: Double, blue: Double) { self.red = red s…

getter/setter

/* getter/setter */ class SpeedLimitedCar: Car { override var speed: Double { get { return super.speed } set { super.speed = min(newValue, 40.0) } } } var limitCar = SpeedLimitedCar() limitCar.speed = 35.0 print(limitCar.description()) lim…

オーバーライド

/* オーバーライド */ class Car: Vehicle { var speed: Double = 0.0 override init() { super.init() maxPassengers = 5 numberOfWheels = 4 } override func description() -> String { return super.description() + "; " + "traveling at \(speed) mph"…

継承

/* 継承 */ class Vehicle { var numberOfWheels: Int? var maxPassengers: Int? init() { } func description() -> String { // return "numberOfWheels = \(numberOfWheels), maxPassengers = \(maxPassengers)" // warning: string interpolation produce…

構造内部の辞書型や列挙型のアクセス方法としてサブスクリプトを定義

/* サブスクリプト 構造内部の辞書型や列挙型のアクセス方法としてサブスクリプトを定義 */ struct TimesTable { let multiplier: Int subscript(index: Int) -> Int { return multiplier * index } } let threeTimesTable = TimesTable(multiplier: 3) prin…

コレクション型 配列、辞書など

/* コレクション型 配列、辞書など */ // var shoppingList: String[] = ["Eggs", "Milk"] // error: array types are now written with the brackets around the element type var shoppingList: [String] = ["Eggs", "Milk"] var airports: Dictionary<String, String> = [</string,>…

タプル

/* タプル */ let http404Error = (404, "Not Found") print("http404Error = \(http404Error)")

アサーション

/* アサーション */ let age = -3 // assert(age >= 0, "A person's age cannot be less than zero") // (RUN TIME) Assertion failed: A person's age cannot be less than zero: ...

プロトコルと拡張

/* プロトコルと拡張 */ protocol ExampleProtocol { var simpleDescription: String { get } mutating func adjust() } extension Int: ExampleProtocol { var simpleDescription: String { return "The number \(self)" } mutating func adjust() { self +…

ネストした型

/* ネストした型 */ struct BlackjackCard { // nested Suit enumeration enum NestSuit: Character { case Spades = "♠", Hearts = "♡", Diamonds = "♢", Clubs = "♣" } } let card = BlackjackCard.NestSuit.Hearts print("card = \(card)") print("card =…

列挙型と構造型

/* 列挙型と構造型 */ enum Suit { case Spades, Hearts, Diamonds, Clubs func simpleDescription() -> String { switch self { case .Spades: return "spades" case .Hearts: return "hearts" case .Diamonds: return "diamonds" case .Clubs: return "clu…

複数の戻り値の関数

/* 複数の戻り値の関数 */ func count(string: String) -> (vowels: Int, consonants: Int, others: Int) { var vowels = 0, consonants = 0, others = 0 for character in string { // switch String(character).lowercaseString { // error: value of type…

関数が戻り値になる関数

/* 関数が戻り値になる関数 */ // func makeIncrementer() -> (Int -> Int) { // error: single argument function types require parentheses func makeIncrementer() -> ((Int) -> Int) { func addOne(number: Int) -> Int { return 1 + number } return a…

funcで関数の定義と代入

/* funcで関数の定義と代入 */ // 関数を定義して func greet(name: String, day: String) -> String { return "Hello \(name), today is \(day)." } // 代入もできる。 // greet("Bob", "Tuesday") // error: missing argument labels 'name:day:' in call …

NULLも入る変数の宣言

/* NULLも入る変数の宣言 */ var flag: Bool? var num: Int? if (flag == nil) { print("flag == NULL") } // if (flag) { // error: value of optional type 'Bool?' must be unwrapped to a value of type 'Bool' if (flag ?? false) { print("flag == tru…