Swift

[SwiftUI] ActionSheetにイベントを設置する

SwiftUIのActionSheetの選択肢を選んだ時の動作をどこに記述すればいいのかわからなかったので調べてみた。

import SwiftUI

struct ContentView: View {
    @State private var isActionSheet = false // アクションシートの表示コントロール用
    
    var body: some View {
            Button(action: {
                self.isActionSheet.toggle() // ボタンをタップした時に表示する様にする
            }) {
                Text("ActionSheet")
            }
            .padding()
            .actionSheet(isPresented: $isActionSheet, content: {
                ActionSheet(title: Text("select action"), 
                                      message: Text("SubTitle"), 
                                      buttons: [
                                              .default(Text("Save"), action: {
                                                  print("Save")  // この選択肢が選ばれた時の動作
                                              }),
                                              .destructive(Text("Delete"), action: {
                                                  print("Delete")
                                              }),
                                              .cancel()  // アクションシートを閉じるだけ
                                              ])
            })
        }
    }

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

ボタンを押した時にisShowActionSheetの値を切り替えてActionSheetの表示、非表示をコントロールしている。

[Swift] UIImageをリサイズする方法メモ

画像をリサイズしてから保存、送信するケースが多いのでそのとき用のメモ

リサイズ用のエクステンション

extension UIImage {
    func resized(withPercentage percentage: CGFloat) -> UIImage? {
        let canvas = CGSize(width: size.width * percentage, height: size.height * percentage)
        return UIGraphicsImageRenderer(size: canvas, format: imageRendererFormat).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))  
        }
    }
    func resized(toWidth width: CGFloat) -> UIImage? {
        let canvas = CGSize(width: width, height: CGFloat(ceil(width/size.width * size.height)))
        return UIGraphicsImageRenderer(size: canvas, format: imageRendererFormat).image {
            _ in draw(in: CGRect(origin: .zero, size: canvas))
        }
    }
}

使い方

let image = UIImage(data: try! Data(contentsOf: URL(string:"http://i.stack.imgur.com/Xs4RX.jpg")!))!

let thumb1 = image.resized(withPercentage: 0.1)
let thumb2 = image.resized(toWidth: 72.0)

Xcode9・Swift4以降で動く

[Swift] コマンドラインからパッケージを作る

Swiftのパッケージをコマンドラインから作成するときのメモ

環境

Mac OS 10.14.5
Xcode Version 10.2.1

パッケージの初期化

  1. 作成したいパッケージの名前のディレクトリを作成
  2. 作成したディレクトリの中に移動
  3. パッケージの初期化

今回は、パッケージ名をexampleとしてみます。

Swiftでの改行( )の扱いでハマったこと

先日、とある事情からSwiftで文字列の処理を書いていました。

その中で盛大にハマった事があったので忘れないようにメモ。

環境

Swift 5.0.1

改行

ここで取り扱う改行というのは以下の三つを指します。