【Xcode】Swiftを使ってはじめてiOSアプリを開発をしてみた

以前から気になっていたiPhoneのiOSアプリ開発ですが、先月中頃から勉強を開始してようやく簡単な一つのアプリを作ることができました。

これからiOSアプリの開発を考えている人の参考になればと思い、アプリ開発までの流れを備忘録的な感じで残しておきます。

追記:App Storeにてリリースしました!

順列・組み合わせ計算ツール

順列・組み合わせ計算ツール

Koki Iida無料posted withアプリーチ

目次

はじめてのiOSアプリ開発

作成したアプリ

はじめに作成したアプリを簡単に説明します。

今回作成したアプリは高校数学で扱った「順列と組み合わせ」の計算をしてくれるというものです。

上記画面の入力欄に計算したい順列と並び替えで必要な数値を入力することで計算結果を画面に表示します。

プログラミング経験のある方は既にお気付きだと思いますが、実装自体の難易度は非常に簡単です。ただ今回はiOSアプリを初めて作るという点に絞って作成したので、そこら辺は大目に見てもらえると幸いです。

使用教材

一応大学の授業や研究でC言語とPythonを触ったことはあったのですが、iOSアプリを開発する際に使うプログラミング言語である「Swift」は今回初めて扱いました。

私はプログラミング言語を新しく習得するときにはネットではなく本派なので、Swift習得のために「詳細SwiftUI iPhoneアプリ開発入門ノート」というものを参考教材として勉強しました。

途中までは本に掲載されているアプリのソースコードを写経して全く同じアプリを作っていたのですが、途中で面倒くさくなって写経は止めました。

個人的には今回のように簡単に作れるアプリを1つ考えて、そこから必要な情報を本で調べるという流れが一番頭に入ってきた気がします。

【補足】本の内容

本筋とは逸れますが先ほど紹介した本の内容についても簡単に触れておこうと思います。

実際に勉強のために読んだ感想としては「プログラミング完全初心者には内容が難しいのではないか」というのが本音です。

一応プログラミングの基礎知識や語句についても触れているのですが、解説のボリュームが少ないので初めてプログラミングをする人だと途中で挫折しそうな内容だと感じました。

実際に私も本の内容は全て理解できたわけではなく所々理解を諦めながら読んでいたので、完全初心者の方は別の参考書を探した方がいいかもしれません。

開発環境

次に開発環境をまとめました。

  • 使用PC:M2チップ搭載 Mac mini
  • OS:MacOS Ventura(version 13.4.1)
  • Xcode:version 14.3.1
  • Swift:version 5.8.1

特にバージョンなどは意識せずにインストールした時点のものを使用していましたが、もし後に紹介するサンプルコードが動かなかった場合は上記開発環境のバージョンなどを参考にしてください。

ソースコード

ここでは作成したアプリのソースコードを紹介します。

初めて作ったということもあり、冗長で可読性の低いコードになっていますがご了承ください。

//
//  ContentView.swift
//  Calculate_P_C
//
//  Created by えだは on 2023/08/03.
//

import SwiftUI

struct ContentView: View {
    @State var p_n:String = ""
    @State var p_r:String = ""
    @State var c_n:String = ""
    @State var c_r:String = ""
    
    //Permutationの計算関数
    func calc_permutation() -> Int {
        var result:Int = 1
        
        if(Int(p_n) != nil && Int(p_r) != nil && 0 <= Int(p_r)! && Int(p_r)! <= Int(p_n)!){
            if (Int(p_r)! == 0){
                return 1
            }else{
                for i in (Int(p_n)!-Int(p_r)! + 1)...Int(p_n)! {
                    result = result * i
                }
                return result
            }
        }else{
            return -1
        }
    }
    
    //Combinationの計算関数
    func calc_combination() -> Int {
        var result:Int
        var denominator:Int = 1
        var numerator:Int = 1
        
        if(Int(c_n) != nil && Int(c_r) != nil && 0 <= Int(c_r)! && Int(c_r)! <= Int(c_n)!){
            if (Int(c_r) == 0){
                return 1
            }else{
                for i in 1...Int(c_r)! {
                    denominator = denominator * i
                }
                for i in (Int(c_n)!-Int(c_r)! + 1)...Int(c_n)! {
                    numerator = numerator * i
                }
                print(denominator)
                print(numerator)
                result = numerator / denominator
                return result
            }
        }else{
            return -1
        }
    }
    
    
    var body: some View {
        VStack{
            //Permutatinに関する表示
            VStack{
                HStack{
                    Text("順列")
                        .font(.title)
                        .fontWeight(.light)
                        .frame(width: 100.0)
                    Spacer()
                }
            }

            HStack {
                TextField("n", text: $p_n)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .keyboardType(.numberPad)
                    .frame(width: 30)
                    .multilineTextAlignment(TextAlignment.center)
                Text("P")
                    .font(.title)
                TextField("r", text: $p_r)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .keyboardType(.numberPad)
                    .frame(width: 30)
                    .multilineTextAlignment(TextAlignment.center)
            }
            HStack {
                if (p_n != "" && p_r != ""){
                    if(calc_permutation() != -1){
                        Text("計算結果:\(calc_permutation())")
                            .padding()
                    }else{
                        Text("正しい値を入力してください。")
                            .foregroundColor(.red)
                    }
                }else{
                    Text("nとrを入力してください。")
                        .padding(.bottom, 100)
                }
            }
            
            //Combinationに関する表示
            VStack{
                HStack{
                    Text("並び替え")
                        .font(.title)
                        .fontWeight(.light)
                        .frame(width: 150.0)
                    Spacer()
                }
            }

            HStack {
                TextField("n", text: $c_n)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .keyboardType(.numberPad)
                    .frame(width: 30)
                    .multilineTextAlignment(TextAlignment.center)
                Text("C")
                    .font(.title)
                TextField("r", text: $c_r)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                    .keyboardType(.numberPad)
                    .frame(width: 30)
                    .multilineTextAlignment(TextAlignment.center)
            }
            HStack {
                if (c_n != "" && c_r != ""){
                    if (calc_combination() != -1){
                        Text("計算結果:\(calc_combination())")
                            .padding()
                    }else{
                        Text("正しい値を入力してください")
                            .padding()
                            .foregroundColor(.red)
                    }
                }else{
                    Text("nとrを入力してください。")
                        .padding()
                }
            }
        }
    }
}
    
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

プログラムの大枠は以下のようになっています。(ご要望があればコードの詳細についても解説します)

17-32行目:順列を計算するためのcalc_permutation()関数の定義
35-58行目:並び替えを計算するためのcalc_combination()関数の定義
63-101行目:順列を計算するための入力欄と計算結果の表示
104-145行目:並び替えを計算するための入力欄と計算結果の表示

苦労した点

アプリ開発で苦労した点として一番苦労したのがSwiftを使ったコーディングです。

Swiftはかなり学びやすいと聞いていたのですがこれまで学んできたC言語やPythonとは記述が全く異なるところがあったり、関数の定義方法が複数あったりと何かと混乱する箇所は多かったです。

また他の言語よりもネットの情報が少ないのでデバッグにかかる時間は長かった気がします。

ただ慣れさえすれば今回苦労した点も大した問題では無いような気もするので、もう少し大きなプログラムを作ったときにまた報告します。

まとめ

今回はSwiftを使ってiOSアプリ開発をするまでの流れなどをまとめました。

この記事で不明な点や気になるところがあれば下のコメント欄までお願いします。それではまた!

よかったらシェアしてね!

この記事を書いた人

えだはのアバター えだは 大学生

国立大学で情報工学を専攻中の22歳の♂。
運営ブログの閲覧者が壊滅的に少ない。

コメント

コメントする

目次