【Mac】DeepLのショートカットで英文をスピード翻訳する
Macの英文をDeepLのショートカットでスピード翻訳する方法
XcodeやSafariからApple Developer Documentationの英文を直ぐに翻訳したい時などに便利な方法です。
- DeepLをインストール
- ショートカットキーを変更
□ DeepLをインストールする
aiを使った自然な翻訳が可能なDeepLをインストールします。
「Macにダウンロード 無料!」をクリックします。
ダウンロードしたファイルDeepL.dmgをダブルクリックしてインストールします。
□DeepLを設定する
Macから「システム環境設定」→「セキュリティとプライバシー」→「プライバシー」タブをクリックします。
鍵を外してアクセシビリティからDeelpLをチェックします。
ログインなしでDeepLを起動します。
ログインの横にある下矢印から環境設定をクリックします。
DeepLのショートカットキーを変更します。
デフォルトは⌘キーCを2回ですが、面倒なので⌘キーLにします。
□ XcodeでDeepLを使ってみる
Xcodeでoptionキーを押しながらクリックするとクイックヘルプが表示されます。
内容が分からない英文をドラックして⌘キーとLをクリックします。
直ぐに翻訳結果が表示されます。
さらに単語を詳しく知りたい時は、単語をダブルクリックします。
赤枠のフィールドをクリックします。
単語の詳細が表示されます。
□ ブラウザでDeepLを使ってみる
Apple Developer Documentation で使ってみます。
赤枠の英文を翻訳して見ます。
英文をドラックして⌘キーとLをクリックします。
翻訳結果が表示されます。
日本語から中国語など、各種外国語にも対応しています。
【SwiftUI】UdemyLessonサンプルアプリ解説
Udemy SwiftUIオンラインレッスンのサンプルTODOアプリ解説
- レッスンでの構造体やクラス、変数の名称が抽象的で値の移り変わりが分かりにくいため、日本語名にしました。
- 全体が見える様、別ファイルを作らないでContentView.swiftに全て記述しました。
アプリの仕様
・+ボタンでテキストフィールドが表示されてTODOを追加
・TODO項目をクリックすると□が☑︎になりTODO内容に取り消し線が入る
・Deleteボタンをクリックするとチェック済みTODOが消える
- 構造体を配列にする場合idという変数を持った「Identifiableプロトコル」が必要になります。今回はUUIDメソッドにてユニークなidを生成していますが、手動で生成しても大丈夫です。ユニークなidがないとSwiftUIがそのViewで利用されているデータがどれなのかを特定しておかないと、データが更新されたときにどのViewを再構築すればいいのかわからなくなってしまうからです。
- タップしたリスト行を検知するのにfirstIndex(of:)メソッドを使っています。その場合「Equatabelプロトコル」が必要になります。
- 構造体配列で生成したインスタンスを更新時にViewに反映させるため、ObservableObjectプロトコルを宣言したクラス内にインスタンスを生成しています。またクラスのインスタンスは各View共通にしたいため、@EnvironmentObjectをつけています。そのためインスタンスは「クラスインスタンス.構造体配列インスタンス」の組み合わせになります。
- テキストフィールドで使うプロパティーラッパー@stateを付けた変数に日本語は使えませんでした。
プログラムソースをgithubにアップしています。
import SwiftUI
struct 構造体:Identifiable,Equatable {
var id = UUID()
var 構造体check:Bool
var 構造体todo:String
init(イニシャライザ変数check:Bool,イニシャライザ変数todo:String) {
self.構造体check = イニシャライザ変数check
self.構造体todo = イニシャライザ変数todo
}
}
class クラス:ObservableObject {
@Published var 構造体インスタンス配列 = [
構造体(イニシャライザ変数check: true, イニシャライザ変数todo: "勉強"),
構造体(イニシャライザ変数check: false, イニシャライザ変数todo: "散歩")
]
@Published var 入力状態チェック変数:Bool = false
}
struct ContentView: View {
@EnvironmentObject var クラスインスタンス:クラス
var body: some View {
NavigationView {
List {
ForEach(クラスインスタンス.構造体インスタンス配列) { ForEach変数 in
Button(action:{
guard let 要素番号 = クラスインスタンス.構造体インスタンス配列.firstIndex(of: ForEach変数) else {
return
}
self.クラスインスタンス.構造体インスタンス配列[要素番号].構造体check.toggle()
})
{
リスト行表示ビュー(リスト行表示ビュー変数check: ForEach変数.構造体check, リスト行表示ビュー変数todo: ForEach変数.構造体todo)
}
}
if self.クラスインスタンス.入力状態チェック変数 {
行追加表示ビュー()
} else {
Button(action: {
self.クラスインスタンス.入力状態チェック変数 = true
})
{
Text("+")
.font(.title)
}
}
}
.navigationBarTitle(Text("ToDo"))
.navigationBarItems(trailing: Button(action:{
削除関数()
})
{
Text("Delete")
}
)
}
}
func 削除関数(){
let 削除関数変数 = クラスインスタンス.構造体インスタンス配列.filter({!$0.構造体check })
self.クラスインスタンス.構造体インスタンス配列 = 削除関数変数
}
}
struct リスト行表示ビュー: View {
var リスト行表示ビュー変数check:Bool
var リスト行表示ビュー変数todo:String
var body: some View {
HStack {
if リスト行表示ビュー変数check {
Text("☑︎")
Text(リスト行表示ビュー変数todo)
.strikethrough()
.fontWeight(.ultraLight)
} else {
Text("□")
Text(リスト行表示ビュー変数todo)
}
}
}
}
struct 行追加表示ビュー: View {
@State var addListViewTodo = "" //現在propertyWrapperでは変数名に日本語を使えません
@EnvironmentObject var クラスインスタンス: クラス
var body: some View {
TextField("タスクを入力してください", text:$addListViewTodo,
onCommit: {
self.todo作成関数()
self.クラスインスタンス.入力状態チェック変数 = false
})
}
func todo作成関数() {
let 新しいtodo = 構造体(イニシャライザ変数check: false, イニシャライザ変数todo: addListViewTodo)
self.クラスインスタンス.構造体インスタンス配列.insert(新しいtodo, at: 0)
self.addListViewTodo = ""
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(クラス())
}
}
【Xcode】GitHubを使う
- XcodeにGitHubのアカウントを登録する。(初回のみ)
- Xcodeでローカルリポジトリを作成する。(プロジェクト作成時のみ)
- Xcodeでコミット(登録)する。
- Xcodeでリモートリポジトリを作成する。(プロジェクト作成時のみ)
- Xcodeでプッシュ(送る)する。
1.Xcode > Preferences を選択します。
2.プラスアイコンからGitHubを選んでContinueを選択します。
3.アカウント名とトークンを入力してSign Inを選択します。
4.GitHubのアカウントが作成されます。
□ Xcodeでローカルリポジトリの作成(プロジェクト作成時のみ)
-
Xcodeで"Source Control > Create Git Repositories..."を選択します。
2.Createを選択します。
□Xcodeでコミット
1.M(modify/修正された)のついたファイルを右クリックして"SourceControl>Commit"ViewController.swift"..."を選択します。
2.Commit 1 File を選択します。
1.Remote > New "プロジェクト名 " Remote... を選択します。
2.Createを選択します。
□ Xcodeでプッシュ
1.Source Control > Push...を選択します。
2.Pushを選択します。
【Xcode】ストーリーボードとエディターを同時に表示させる
プロジェクトができた画面からMain.storyboardを選択します
右上のAdd Editer On Rightをクリックします
プロジェクト名から階層を辿ってViewController.swiftをクリックします
View Controller Scene をクリックするとストーリーボードが表示されます
画面を大きく使いたい時はそれぞれ非表示にすることができます
【Xcode】ストーリーボードとエディターのガイドを非表示にする
- ストーリーボードのガイドを非表示にする方法
Mimimapのチェックを外します
- エディターのガイドを非表示にする方法
Mimimapのチェックを外します
【Xcode】MFMailComposeViewControllerを使ってアプリ内からメールを送信する
MessageUI.frameworkを追加します
エディターで以下を追加します
import MessageUI
MFMailComposeViewControllerDelegate
Mail送信ボタンをMain.storyboardに作成してIBActionを設定します
例)tapBtnMale
@IBAction func tapBtnMale(_ sender: Any) {
if MFMailComposeViewController.canSendMail() {
let mail = MFMailComposeViewController()
mail.mailComposeDelegate = self
mail.setToRecipients(["xxx@xxx.xxx"]) // 宛先アドレス
mail.setSubject("お問い合わせ") // 件名
mail.setMessageBody("ここに本文が入ります。", isHTML: false) // 本文
present(mail, animated: true, completion: nil)
} else {
print("送信できません")
}
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
switch result {
case .cancelled:
print("キャンセル")
case .saved:
print("下書き保存")
case .sent:
print("送信成功")
default:
print("送信失敗")
}
dismiss(animated: true, completion: nil)
}
【Xcode】Projectをコピーして新規作成する
既存のProjectを複製して新しいProjectを作成する方法
例)projectA をコピーしてprojectBを作成する
projectA のフォルダをコピーして貼り付けます
projectBに名前を変更するします
projectB内の「projectA.xcodeproj」をXcodeで開きます
NavigatorエリアからプロジェクトのNameを"プロジェクトB"に変更します
Renameを選択します
Continueを選択します
product→scheme→Manage Schemes を選択します
プラスボタンから「projectB」を作成します
projectAは削除します
Deleteを選択します
Closeを選択します
projectA を projectB へ
projectATests を projectBTests へ
projectAUITests を projectBUITests へリネームします
TARGETS → Project → Build Settings → Packaging MyOrganizationIdentifer.projectA を MyOrganizationIdentifer.project Bに変更 します
projectA/Info.plist → projectB/Info.plist に変更します