SlideShare a Scribd company logo
1 of 62
Download to read offline
できるプログラマーを本気で育てる
Swift超⼊⾨	iOSプログラマーへの
第⼀歩	
テクノロジックアート	
⻑瀬 嘉秀
■変数、数値型、文字列	
■演算子	
■複合型、配列、列挙型、関連値	
■制御文	
■繰り返し	
■オプショナル型、構造体	
■簡単なサンプル開発	
内容
プロを目指すSwift基本文法と応用	
【発売日】 2015年12月4日	
【著作】 テクノロジックアート	
【監修】 長瀬 嘉秀、高部 真一郎	
【出版】 株式会社リックテレコム	
【ISBN】 978-4-89797-975-5	
勉強会の参考書
他の一般的なプログラミング言語と同様に、Swift
にも「変数」が用意されています。 プログラミン
グにおける変数は、そのプログラムで扱うデー
タを記憶しておく「入れ物」のことです。データの
取り扱いが容易になるように、個別に「名札」を
付けておく、 と考えるとよいでしょう。	
変数(var)
var currentLoginAttempt: Int = 0	
var π: Double = 3.14159	
var 現在のログイン回数 = 0	
var x=0.0,y=1.0,z=2.0	
print(currentLoginAttempt)	
print(π)	
print(現在のログイン回数)	
print(x,y,z)	
変数(コード1)
var currentLoginAttempt = 1	
print("現在のログイン回数は
(currentLoginAttempt)回です")	
変数(コード1)
変数のスコープ	
立した機能のことをいいます。モジュールは抽象概念です。通常、1つのモジュールは、
扱うデータの範囲や、画面などのインターフェースによって規定されます。あるいは、
通信プログラムを扱う機能と、その通信で受け取ったデータを画面に表示する機能と
いったように、システムのレイヤー(ここでは機能階層の意)によって決められます。
図2-2
システム全体※
モジュール 他のモジュール
public グローバル変数
internal(オブジェクト)
インスタンス変数
internal(オブジェクト)
インスタンス変数
private
(同一ファイル)
ローカル変数
private
(同一ファイル)
ローカル変数
private
(同一ファイル)
ローカル変数
※ここでいう「システム全体」とは、1台のiPhoneやiPadの上で動いている
 全てのアプリケーションを指しています。
例えば、ある会社の勤怠を管理したいとしましょう。社員の異動を管理する機能と、
個々の社員が何時に出社し、いつ休むのかを管理する機能を一緒にしたら、大抵は非
「定数」とは、前節の変数と同じように、値に
対して名前を付けることで、後で参照 しや
すくさせるものです。ただし変数とは異なり、
一度設定した値を後から変更する ことはで
きません。つまり、一度代入した「初期値」を
変更することができない変数と いえます。	
定数(let)
予約語	
に、「自動車」という食べ物を作ってしまったら、わかりづらいですよね。機械に対す
る指示を記載するプログラミングでは、そういった曖昧さは基本的に許されないので、
一般的には言語の仕様でエラーとして扱われます。Swiftの場合には下記のような予
約語があります。用途ごとに、アルファベット順に並べてみました。
●宣言
class deinit enum extension func
import init inout internal let
operator private protocol public static
struct subscript typealias var
●文
break case continue default defer
do else fallthrough for guard
if in repeat return switch
where while
●式、型
as catch dynamicType false is
nil rethrows self Self super
throw throws true try __COLUMN__
__FILE__ __FUNCTION__ __LINE__
整数型(Int, UInt)	
数値型(Int,	Float,	Double)	
第I部基本文法 1.1 整数型(Int, UInt)
整数を扱う場合に使用されるデータ型は「整数型」です。Swiftの整数型は1つだ
けではなく、いくつかの種類があります。表3-1のように、それぞれの型には、その型
で扱うことのできる数値に、一定の範囲があります。つまり、データ型ごとに、値の上
限と下限があるということです。
表3-1
型 最小値 最大値
Int8 -128 127
Int16 -32,768 32,767
Int32 -2,147,483,648 2,147,483,647
Int64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807
UInt8 0 255
UInt16 0 65,535
UInt32 0 4,294,967,295
UInt64 0 18,446,744,073,709,551,615
Int / UInt 32ビットマシンならば Int32/UInt32、64ビットマシンならばInt64/UInt64
使用しているコンピュータによる
浮動小数点型(Float, Double)	
単精度浮動小数点型 : Float	
倍精度浮動小数点型 : Double	
数値型	
第 章3
第I部基本文法
1 数値
1.3 10進数以外の数値
整数のリテラルは、10進数、2進数、8進数、16進数で値をセットで
「15」という数を表す際にも、リスト3-2のようにいくつかの表現が可能
進数で「0b1111」、8進数で「0o17」、16進数で「0xF」と表現されます。
let decimal = 15 // 10進数で15
let binary = 0b1111 // 2進数で15
let octal = 0o17 // 8進数で15
let hexadecimal = 0xF // 16進数で15
1
2
3
4
これらの違いを理解し、うまく使い分けてください。
2.1 数値の計算
Swiftでは数値の計算に、表3-3の算術演算子を使用することができます。
表3-3
演算子 オーバーフローを無視する演算子 意味
+ &+ 加算
- &- 減算
* &* 乗算
/ &/ 除算
% &% 剰余 左項を右項で割った余りを求める
算術演算子を使った計算の例をいくつか見てみましょう。値の範囲が狭い数値型
Int8(-128 ∼ 127)やUInt8(0 ∼ 255)を使用する際は、オーバーフローに注意して
ください。
「オーバーフロー」とは、プログラムで数値演算を行った結果が、扱える数値の範囲
を超えてしまうことです。例えばリスト3-3のように、Int32型で10万 1万の計算は
エラーになりませんが、10万 10万の計算はエラーになってしまいます。オーバーフ
ローを無視する演算子を使用すると、オーバーフローが起きても無視されて計算が
数値の計算	
var a: Int32 = 100000 // 10万	
var b: Int32 = 10000 // 1 万	
var result = a*b	
print(result)
var i:Int=10	
var j:Int=5	
var k:Int=3	
var result = 0	
result=i+j	
result=i-j	
result=i*j	
result=i/j	
result=i%k	
数値の計算2
数値の⽐較	
040
数値同士を比較したいときは、「比較演算子」を使います。ほとんどの比較演算子
は、結果としてtrueまたはfalseを返します。表3-5は、数値の比較に使われる演算子
です。
表3-5
演算子 説明
== 左項と右項が等しい場合はtrueを返す。それ以外の場合はfalseを返す。
!= 左項と右項が等しくない場合はtrueを返す。それ以外の場合はfalseを返す。
< 左項が右項未満の場合はtrueを返す。それ以外の場合はfalseを返す。
<= 左項が右項以下の場合はtrueを返す。それ以外の場合はfalseを返す。
第3章基本的なデータ型
2 数値の操作
演算子 説明
> 左項が右項より大きい場合はtrueを返す。それ以外の場合はfalseを返す。
>= 左項が右項以上の場合はtrueを返す。それ以外の場合はfalseを返す。
比較演算子の使用例をリスト3-9に示します。結果については特に説明する必要は
ありませんね。
var i: Int = 5
var j: Int = 8
1
2
リスト3-9
5
8
var i:Int=5	
var j:Int=8	
var k:Int=3	
var m:Int=5	
i == j // false	
i != j // true	
i < k // false	
i <= m // true	
i > m // false	
i >= k // true	
数値の⽐較(コード)
let intBeforeString: Int = 123	
let intToString: String =
String(intBeforeString)	
let doubleBeforeInt: Double = 3.14	
let doubleToInt: Int = Int(doubleBeforeInt)	
数値の⽂字列変換、型変換	
041
照)というのは、「型という器を入れ替える」ことを意味します。図3-1においては「St
ring(変数)」の表記が型キャストに該当し、数値型の値を文字列型に変換していま
す。
図3-1
キャスト
String(変数)
3.14
数値型
“3.14“
文字列型
数値から文字列に変換する例を下に示します。intToStringの値を見ると、中身が
「"」(ダブルクォート)で囲まれていますから、数値が文字列に変わっていることが
わかります。
let str: String = "ここまで"	
let char: Character = "こ"	
⽂字列(String)
特殊⽂字	
043
●特殊文字
「"」(ダブルクォート)で囲んだ文字列の中に、「」(バックスラッシュ)を用いるこ
とにより、特殊な意味を持つ記号を含めることができます。これは「特殊文字」と呼
ばれ、表3-6のような例があります。
表3-6
表記 名称、動作
0 ヌル文字
 バックスラッシュ
t 水平タブ
n ラインフィード
r キャリッジリターン
(変数) 変数の値を文字列として表示
u{n} Unicode文字(nは16進数1 ∼ 8桁のUnicode符号位置)
var emptyString1 = String()	
var emptyString2 = ""	
空⽂字
let sakebi = String(repeating: "あ",count: 5)	
繰り返し⽂字
let saySwift = "hello"	
let saySwiftStartIndex =
saySwift.characters.startIndex	
print(saySwift[saySwiftStartIndex])	
let saySwiftEndIndex = saySwift.index(before:
saySwift.endIndex)	
print(saySwift[saySwiftEndIndex])	
var countChar: Int = saySwift.characters.count	
print(countChar)	
繰り返し⽂字2
var hello = "hello"	
var helloSame = "hello"	
print( hello == helloSame )	
繰り返し⽂字3
var word = ""	
var comma = ","	
var vegetable1 = "apple"	
var vegetable2 = "berry"	
word = vegetable1 + comma	
print(word.characters.count)	
word = word + vegetable2	
print(word.characters.count)	
⽂字列の連結
var word = "orange,apple,grape"	
let cells = word.components(separatedBy: ",")	
print(cells[0])	
⽂字列の分割
var basetime = NSDate()	
⽇付や時刻
演算⼦	
055
う少し詳しく解説していくことにします。
演算子とは、プログラム上で行う演算を指示するための記号のことです。ここでいう
「演算」とは、数値の計算や代入、比較などを指しています。Swiftで使われる主な演
算子を表4-1に示します。
表4-1
優先度 演算子 意味
高い () [] -> . 関数呼出し演算子、配列要素、配列へ要
素のアクセス
! ~ - + * & ++ -- ほとんどの単項演算子
<< >> ビットシフト
* / % & 乗算、除算、剰余、ビット積(AND)
第 章4
第I部基本文法
優先度 演算子 意味
+ - | ^ 加算、減算、ビット和(OR)、排他的ビット
和(XOR)
..< ... 範囲
< <= > >= == != ~= 大小比較、等値、非等値、マッチング
&& 論理積
|| 論理和
?: 条件演算子
低い
= += -= *= /= %= **= &= |= ^=
<<= >>= &&= ||=
代入、複合代入
var result = 3 + 4 * 5	
1>0&&1>0	
var result=(3+4)*5	
演算⼦の優先度
var point = 10	
point += 1	
var point = 10	
point=point+1	
複合代⼊演算⼦	
前述の代入演算子「=」をほかの演算子と組み合わせたものを、「複合代入演算子」
と呼びます。
複合代入演算子の例を下に列挙します。それぞれ、「=」の前にある演算子が意味
する演算を左辺と右辺を使って行い、その結果を左辺に代入します。
+= -= *= /= %= **= &= |= ^= <<=
>>= &&= ||=
代表的な例として、リスト4-4に「+=」の使い方を示します。
var point = 10
point += 1
1
2
リスト4-4
10
11
このように、「point += 1」ではpoint(得点)に1を加えた結果をpointに代入しま
す。これは次のコードと同じことです。
var point = 101
リスト4-5
10
var animal1 = "cat", animal2 = "cat", animal3 =
"dog"	
animal1 == animal2	
animal1 == animal3	
var num1=5,num2=20,num3=30	
num1 >= 5	
num2 > num3	
⽐較演算⼦
var set_id: Int = 1234	
var set_password: String = "hirakegoma"	
var id: Int = 1234	
var password: String = "hirake"	
if id == set_id && password == set_password {	
print( " ロ グ イ ン に 成 功 し ま し た 。" )	
}else{	
print("IDまたはパスワードが異なります。")	
}	
論理演算⼦
「タプル」とはデータ型の一種であり、複数の
値をまとめて管理するためにあります。 タ
プルは Swift だけが持つ機能ではありませ
んが、Swift の特徴の 1 つといえます。	
複合型/タプル(tuple)	
var employee = (1234, "Suzuki")	
var employee = (staff_code: 1234, name: "Suzuki")
var apple: String = "apple"	
var orange: String = "orange"	
var lemon: String = "lemon"	
var fruits: [String] = ["apple", "orange", "lemon"]	
配列(Array)	
しょう。図5-1の例ではfruitsという配列に、apple、orange、lemonという値
れています。
図5
fruits
apple orange lemon
リンゴ オレンジ レモン
らのフルーツ全部を扱いたい場合、もし、文字列として1つずつ変数で宣言
スト5-5のように長くなってしまいます。
: String = "apple"
ge: String = "orange"
リスト5-
var score: [Int] = [80, 70, 100]	
score[0]	
score[1]	
score[2]	
ディクショナリ型
enum Score {	
case Japanese(Int)	
case Math(Int)	
case Science(Int)	
}	
var suzuki = Score.Math(80) // 鈴木さんの数学のテスト結果	
switch suzuki {	
case .Math(var point) where point <= 70:	
print("normal")	
case .Math(var point) where point <= 80:	
print("good")	
case .Math(var point) where point <= 90:	
print("excellent")	
default:	
print("Go for it!")	
}	
列挙型(enum)
関連値(Associated	Values)	
例えば、1つの商品について、数値9桁+3桁+1桁で表されるJANコード(1次元
バーコード)と、商品名などの文字列を表すQRコード(2次元コード)を使って、識
別管理していたとします。これら2つの読み取り結果は、いずれも同一の商品を指し
ますが、コードの読み取り方法が2種類あるわけです。関連値はこうした場合にも利
用できます。
JANコード ①国番号+メーカー番号 (9桁)
②商品番号 (3桁)
③チェックデジット(読み取り間違いを検出するための数字)(1桁)
QRコード (最大データ量:英数字1523文字、漢字644文字)
列挙型で関連値を使うと、この例のような情報は、バーコード型という1つの型で
表現することができます。例えばリスト6-6のように記述します。
enum BarCode {	
case JANCode(Int,Int,Int)	
case QRCode(String)	
}	
// JANコードの例	
// var productBarCode = BarCode.JANCode(491234567, 890, 4) // QRコードの例	
var productBarCode = BarCode.QRCode("ABCDEFGHIJKLMNOP")	
switch productBarCode {	
case let .JANCode(mfr, product, check):	
print("JANCode: (mfr), (product), (check).")	
case let .QRCode(productCode):	
print("QR Code: (productCode).")	
}	
関連値(コード)
if文	
if条件式{	
条件式が真の場合に行う処理	
}	
制御⽂/条件分岐	(if,	switch)	
var temperatureInRoom = 32	
if temperatureInRoom >= 30 {	
print("とても暑いです、脱水症状には気を付けましょう。")	
}
if 条件式1{ 条件式が真の場合に行う処理	
}elseif条件式2{	
条件式 1 が偽、かつ条件式 2 が真の場合に
行う処理	
}else{	
条件式 1、2 が偽の場合に行う処理	
}	
条件分岐(if	else)
var temperatureInRoom = 25	
if temperatureInRoom >= 30 {	
print ( " と て も 暑 い で す 、脱 水 症 状 に は
気 を 付 け ま し ょ う 。" )	
} else if temperatureInRoom <= 10 {	
print ( " 寒 い で す 。風 邪 に 気 を 付 け ま し ょ
う 。" )	
}else{	
print("過ごしやすい室温です。")	
}	
条件分岐(if	else コード)
switch⽂	
第 章8
第I部基本文法
switch 考察する値 {
case 値 1 :
値 1の場合に行う処理
case 値 2,値 3:
値 2,値 3の場合に行う処理
case 値 4 where 条件 :
値 4の場合で条件に当てはまるときに行う処理
default:
上記以外の場合に行う処理
}
1
2
3
4
5
6
7
8
9
10
リスト8-6
リスト8-7に、日本語の文字「さ」が何行に入るのかを判断している条件式を示し
ます。
まずJapaneseCharacter(日本語文字)に「さ」を代入しています。次にJapanese
Characterに対するswitch文を記述します。最初のcaseで「あ行」の文字に当てはま
るかどうかを判断します。文字は「さ」なので該当せず、次のcaseの「か行」に入りま
let JapaneseCharacter: Character = "さ"	
switch JapaneseCharacter {	
case "あ","い","う","え","お":	
print("(JapaneseCharacter)はあ行です。")	
case "か","き","く","け","こ":	
print("(JapaneseCharacter)はか行です。")	
case "わ","を":	
print("(JapaneseCharacter)はわ行です。")	
default:	
print("(JapaneseCharacter)はあ行でもか行でもわ行でも
ありません。")	
}	
switch⽂(コード)
for index in 1...5 {	
print("(index)回目です。")	
}	
繰り返し(for,	while) for	/	for-in⽂	
for-in文ではオブジェクトから順番に値を取得し、オブジェ
し終えるまでループを繰り返します。構文はリスト8-13のとお
for 変数 in オブジェクト {
繰り返し実行する処理
}
1
2
3
4
5
オブジェクトには、複数の値を順番に渡してくれることがわ
列、ハッシュ、範囲オブジェクトなど)を指定します。範囲オブ
うに表し、「1, 2, 3, 4, 5」と列挙する手間を省いたものです。範
たfor-in文の例を次に示します。
var i=0	
while i<5{	
i+=1	
print(i)	
}	
while⽂	
093
2.2 while文
while文は、条件が真の間だけ処理を繰り返し実行します。構文はリスト8-1
おりです。
while 条件式 {
繰り返し実行する処理
}
1
2
3
4
5
リスト
リスト8-19に例を示します。
var battingcenterballs = 0	
repeat {	
battingcenterballs += 1	
} while battingcenterballs < 20	
print("Game Over!")	
repeat-while⽂	
095
while文は最初の条件式が偽だったときには繰り返し処理を一切実行
対し、repeat-while文は必ず1回は処理を実行します。whileに記載され
である間は処理が繰り返されます。構文はリスト8-22のとおりです。
repeat {
繰り返し実行する処理
} while 条件式
1
2
3
4
5
リスト8-23に例を示します。まず、バッティングセンタでボールを打っ
Swiftでは変数を宣言する際に値(初期値)を
セットする必要があります。ただし、 オプシ
ョナル型で定義することにより、値が入って
いない状態の変数を宣言できます。	
オプショナル型(optional)	
var strNil: String? = nil	
var strNil2: String?	
var strBlank: String? = ""	
var strOptional: Optional<String> = nil
構造体は、プログラム内で取り扱う必要のあ
る各項目を、1 つにまとめて名前付けしたも
のです。	
構造体(struct)	
第 章10
図10-1
名前
学年
身長
名前
生徒
学年
身長
構造体は「struct」を使って宣言します。次の例では、name(名前)、grade(学年)、
struct Student {	
var name: String	
var grade: Int	
var height: Double	
}	
var swift: Student = Student(name: "swift", grade: 6,
height: 150.5)	
swift.name	
swift.height	
構造体(コード)
偶数/奇数の 判定アプリケーション	
簡単な	サンプル開発	第 章12
第I部基本文法
図12-1
完成時のアプリケーション画面
1.1
プロジェクトの作成	
新しいプロジェクトとしてSimpleExampleプロジェクトを作成します。Xcodeを
立ち上げて、File → New→ Project...を実行しましょう。iOS Applicationの「Single
View Application」を選択して、「SimpleExample」を作成してください。
図12-2
SimpleExampleの作成
ストーリーボードの作成	
1 偶数/奇数の判定アプリケーション
プロジェクトを作成すると、図12-3に挙げるリソースが自動的に生成されます。
図12-3
リソースの一覧画面
ストーリーボードでの画面作成
フィールドの作成	
ストーリーボードでの画面作成
Main.storyboardを選択してストーリーボード(Storyboard)を開き、テキスト
フィールド(Text Field)を右下のエリアからドラッグして配置します。
図12-4
テキストフィールドをドラッグして配置
次に、結果を表示するためのラベル(Label)を、テキストフィールドと同様に右下
のエリアからドラッグして配置します。デフォルトではラベルの名前はLabelになって
ラベルの配置	
第 章12
図12-5
ラベルを配置し名前をResultに変える
画面の設定は以上です。
テキストフィール ドを ViewController クラスへコントロール+ドラッ
グし、宣言文を追加しましょう。	
さらに、テキストフィールドに入力されたテキストを取得し制御でき
るようにするた めに、delegate をセットする文を viewDidLoad メ
ソッドに追加します。	
「Name」に「inputText」と入力し、「Connect」ボタンをクリックしてく
ださい。	
ラベルと対応する変数 outputText の宣言文を追加しましょう。	
画⾯とコードの紐付け	
画面の設定は以上です。
3 宣言文の追加
プログラムと画面を対応付けるために、Swiftファイルを修正していきます。
プロジェクト作成時に生成された「ViewController.swift」を開きましょう。まず、テ
キストフィールドとラベルをそれぞれプログラムに対応付けます。テキストフィール
ドをViewControllerクラスへコントロール+ドラッグし、宣言文を追加しましょう。
図12-6のような画面が表示されるので、「Name」に「inputText」と入力し、「Conn
ect」ボタンをクリックしてください。
図12-6
宣言文の追加
@IBOutlet weak var inputText: UITextField!	
@IBOutlet weak var outputText: UILabel!	
紐付けたコード
クラスの修正	
第12章簡単なサンプル開発
ここから実際のコードを修正していきます。
iOSのプログラムの主役は画面ですので、画面に関するUIKitの知識はある程度
必要になります。詳細については後の章で説明していきますので、以下の説明では
UIKitに関する箇所は「決まりごと」として流していただき、Swift言語の基本文法に
注目してください。
まずは、入力されたテキストを扱えるようにするために、ViewControllerクラスにUI
TextFieldDelegateプロトコルを追加します。
class ViewController: UIViewController, UITextFieldDelegate {11
リスト12-1
ストーリーボードから追加したinputTextとoutputTextについては、ViewControll
erクラスのコンストラクタで初期値をセットしたくないので、オプショナル型に変更し
ます。
@IBOutlet weak var inputText: UITextField?
@IBOutlet weak var outputText: UILabel!
13
14
15
リスト12-2
さらに、テキストフィールドに入力されたテキストを取得し制御できるようにするた
第12章簡単なサンプル開発
ここから実際のコードを修正していきます。
iOSのプログラムの主役は画面ですので、画面に関するUIKitの知識はある程度
必要になります。詳細については後の章で説明していきますので、以下の説明では
UIKitに関する箇所は「決まりごと」として流していただき、Swift言語の基本文法に
注目してください。
まずは、入力されたテキストを扱えるようにするために、ViewControllerクラスにUI
TextFieldDelegateプロトコルを追加します。
class ViewController: UIViewController, UITextFieldDelegate {11
リスト12-1
ストーリーボードから追加したinputTextとoutputTextについては、ViewControll
erクラスのコンストラクタで初期値をセットしたくないので、オプショナル型に変更し
ます。
@IBOutlet weak var inputText: UITextField?
@IBOutlet weak var outputText: UILabel!
13
14
15
リスト12-2
さらに、テキストフィールドに入力されたテキストを取得し制御できるようにするた
めに、delegateをセットする文をviewDidLoadメソッドに追加します。
override func viewDidLoad() {	
super.viewDidLoad()	
// Do any additional setup after loading
the view, typically from a nib.	
inputText?.delegate = self	
_ = UITextField()	
}	
⼊⼒フィールドの初期化を追加	
135
erクラスのコンストラクタで初期値をセットしたくないので、オプショナル型に変更し
ます。
@IBOutlet weak var inputText: UITextField?
@IBOutlet weak var outputText: UILabel!
13
14
15
リスト12-2
さらに、テキストフィールドに入力されたテキストを取得し制御できるようにするた
めに、delegateをセットする文をviewDidLoadメソッドに追加します。
inputText?.delegate = self26
リスト12-3
最後に、テキストフィールドに文字列が入力された後にリターンキーが押下された
ら、入力文字の処理が起動するようにします。具体的には、リスト12-4のメソッドを
追加します。
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder();
outputText.text = checkInputText(textField.text!)
return true
}
17
18
19
20
21
リスト12-4
func textFieldShouldReturn(_ textField: UITextField) ->
Bool {	
textField.resignFirstResponder();	
outputText.text = checkInputText(text:
textField.text!)	
return true	
}	
リターン⼊⼒時の処理	
135
さらに、テキストフィールドに入力されたテキストを取得し制御できるようにするた
めに、delegateをセットする文をviewDidLoadメソッドに追加します。
inputText?.delegate = self26
リスト12-3
最後に、テキストフィールドに文字列が入力された後にリターンキーが押下された
ら、入力文字の処理が起動するようにします。具体的には、リスト12-4のメソッドを
追加します。
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.resignFirstResponder();
outputText.text = checkInputText(textField.text!)
return true
}
17
18
19
20
21
リスト12-4
奇数偶数の判定処理	
I部基本文法
コ ー ド の 記 述
重要なのは、checkInputTextが処理メソッドであり、そこにメインの処理を記述す
るという点です。そのメソッドの結果を、ラベルのタイトルであるoutputText.textに
セットし、画面に表示します。
次に、checkInputTextメソッドの処理内容を見ていきましょう。はじめにif文を使
い、入力されたのが整数か文字かを判定します。
if let number = Int(text) {35
リスト12-5
入力された文字列は、このメソッドの引数であるtextに入っています。この文字列
を、Int()で型変換します。変換結果は、letによってnumberに入ります。整数でない
場合はnumberにnilが入るため、else文が実行されてエラーが返されます。
else
{
return "エラー "
}
43
44
45
46
リスト12-6
部基本文法 コ ー ド の 記 述
重要なのは、checkInputTextが処理メソッドであり、そこにメインの処理を記述す
るという点です。そのメソッドの結果を、ラベルのタイトルであるoutputText.textに
セットし、画面に表示します。
次に、checkInputTextメソッドの処理内容を見ていきましょう。はじめにif文を使
い、入力されたのが整数か文字かを判定します。
if let number = Int(text) {35
リスト12-5
入力された文字列は、このメソッドの引数であるtextに入っています。この文字列
を、Int()で型変換します。変換結果は、letによってnumberに入ります。整数でない
場合はnumberにnilが入るため、else文が実行されてエラーが返されます。
else
{
return "エラー "
}
43
44
45
46
リスト12-6
奇数偶数の判定処理(続き)	
136
場合はnumberにnilが入るため、else文が実行されてエラーが返されます。
else
{
return "エラー "
}
43
44
45
46
リスト12-6
整数だった場合は、リスト12-7のif文で評価されます。
if number % 2 == 0 {
return "偶数"
}
else {
return "奇数"
}
36
37
38
39
40
41
リスト12-7
偶数か奇数かを見分けるために、2で割った余りが0なら"偶数"、それ以外は"奇
数"を返すようにしています。
func checkInputText(text: String) -> String {	
if let number = Int(text) {	
if number % 2 == 0 { return " 偶数 "	
}	
else {	
return " 奇数 " }	
}	
else {	
return "エラー "	
}	
}	
奇数偶数の判定処理(続き コード)
1000までの間の素数を求めて、表示してく
ださい。	
演習問題
できるプログラマーを本気で育てる
Swift超⼊⾨	IOSプログラマーへの
第⼀歩	
テクノロジックアート	
⻑瀬 嘉秀

More Related Content

Viewers also liked

情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現Tokai University
 
Slide keieisystem2012
Slide keieisystem2012Slide keieisystem2012
Slide keieisystem2012ISE_SE_HOSEI
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Inc.
 
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版Yoshio Hanawa
 
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halfCvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halftomoaki0705
 
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)MROC Japan
 
整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮JAVA DM
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4Takeshi Yamamuro
 
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Tetsuya Yoshida
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12swkagami
 

Viewers also liked (20)

Studyx5
Studyx5Studyx5
Studyx5
 
Java勉強会2017.3.17
Java勉強会2017.3.17Java勉強会2017.3.17
Java勉強会2017.3.17
 
Studyx4
Studyx4Studyx4
Studyx4
 
Studyx3
Studyx3Studyx3
Studyx3
 
Game world creation
Game world creationGame world creation
Game world creation
 
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
 
計算機理論入門03
計算機理論入門03計算機理論入門03
計算機理論入門03
 
計算機理論入門04
計算機理論入門04計算機理論入門04
計算機理論入門04
 
計算機理論入門05
計算機理論入門05計算機理論入門05
計算機理論入門05
 
計算機理論入門07
計算機理論入門07計算機理論入門07
計算機理論入門07
 
Slide keieisystem2012
Slide keieisystem2012Slide keieisystem2012
Slide keieisystem2012
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
 
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
 
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halfCvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
 
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)
 
整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮
 
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
浮動小数点(IEEE754)を圧縮したい@dsirnlp#4
 
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12
 
科学技術コミュニケーションの原点と座標軸20150517(本編)
科学技術コミュニケーションの原点と座標軸20150517(本編)科学技術コミュニケーションの原点と座標軸20150517(本編)
科学技術コミュニケーションの原点と座標軸20150517(本編)
 

Similar to できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩

初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)Masahiro Hayashi
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
プログラミング講座 #1 基本的なプログラム
プログラミング講座 #1 基本的なプログラムプログラミング講座 #1 基本的なプログラム
プログラミング講座 #1 基本的なプログラムZOIdayo
 
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2アルゴリズムとデータ構造2
アルゴリズムとデータ構造2Kenta Hattori
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Yukiko Kato
 
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターンTaisuke Oe
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編Masatoshi Itoh
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
テーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfテーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfTakuya Kubo
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章Yuta Yokoi
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門gypsygypsy
 
20080617 05 Mysql
20080617 05 Mysql20080617 05 Mysql
20080617 05 Mysqlstiq 2e
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみたina job
 

Similar to できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩 (19)

初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
プログラミング講座 #1 基本的なプログラム
プログラミング講座 #1 基本的なプログラムプログラミング講座 #1 基本的なプログラム
プログラミング講座 #1 基本的なプログラム
 
LDA入門
LDA入門LDA入門
LDA入門
 
アルゴリズムとデータ構造2
アルゴリズムとデータ構造2アルゴリズムとデータ構造2
アルゴリズムとデータ構造2
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
 
多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン多相な関数の定義から学ぶ、型クラスデザインパターン
多相な関数の定義から学ぶ、型クラスデザインパターン
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
テーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdfテーマ別勉強会(R言語)#1.pdf
テーマ別勉強会(R言語)#1.pdf
 
ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章ゆるふわScalaコップ本読書会 第7章
ゆるふわScalaコップ本読書会 第7章
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門TypeScript & 関数型講座 第3回 関数型入門
TypeScript & 関数型講座 第3回 関数型入門
 
20080617 05 Mysql
20080617 05 Mysql20080617 05 Mysql
20080617 05 Mysql
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 
Refactoring point of Kotlin application
Refactoring point of Kotlin applicationRefactoring point of Kotlin application
Refactoring point of Kotlin application
 

できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩