FC2ブログ
 

米国株テクニカル分析ブログ ソシアルアドバンテージ 香港株、米国株、エリオット波動のブログ

SwiftのComputed Variable Get and Set Declarationはgetとsetがこうなってる

Computed Variable Get and Set Declarationについてもう一つ記事を書きたくなったので書く


Computed Variable Get and Set Declarationについてはまずこちらを見てほしい
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
SwiftでのComputed Variable Get Declarationの構造と使い方
http://dispatchtomain.blog116.fc2.com/blog-entry-2107.html
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



Computed Variable Get and Set Declarationは、前もって定義した変数の値を取得して加工して変数として保持するという役割ができる超絶有能変数なのだが、私はこのComputed Variable Get and Set Declarationを見ていると時々混乱してしまう


というのも、Computed Variable Get and Set Declarationは前もって定義した変数を取り込むわけなのだが、それをsetの中で定義する

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
var <#variable name#>: <#type#> {
get {
<#statements#>
}
set {
<#variable name#> = newValue
}
}

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

だけど私が日本人だからなんだろうけど、getと言われると手に入れるみたいな印象を持ってしまうし、setと言われるとなんだか設定するみたいなイメージを持ってしまう、settingからくるのだろうが、こんな感じでプログラミングをやっていると日本人の独特のカタカナイングリッシュあるいはご都合イングリッシュあるいは日式英語wwの影響を時々感じてしまう

だから混乱してしまうのだ


だからComputed Variable Get and Set Declarationを使う方は前もって定義した変数を定めるのがsetで処理した結果を変数として保持することをgetだということを気をつけてほしい


Computed Variable Get and Set Declaration  Swift 使い方

スポンサーサイト



Swiftのenum(列挙)はとどのつまり自分で作った属性情報のことだ!!!!

Swiftを学習している時にenumがめちゃくちゃ理解しにくかったのでわかりやすく解説しておこうと思う


enumは列挙型と書かれているのでイマイチよくわからん方もいると思うが、私の理解によればenumは列挙型というよりも属性情報と書いたほうが正確なような気がする


列挙型と属性情報、このことは信用と相信の違いみたいなもんだ(信用は2者のうち片方がもう片方を評価した結果頼りにすること、相信は互いに頼りにすること、つまり若干違う)


〈enumは何に使うの?〉
enumとはどう使うかというと、個人のプロフィールを扱うような時に使う

例えば百貨店が自社のカード会員にダイレクトメールを送る時、を想像してほしいのだが福岡県にあるスーパーマーケットが会員にダイレクトメールを送る時、会員であっても九州以外の県に住んでいる人にダイレクトメールを送ることは費用の無駄だ、なぜなら大分や熊本や長崎の人はセールに期待して来るだろうがおそらく三重県や高知県の人は福岡市の百貨店のセールには来てくれないからだ

だからこういうダイレクトメールを送る相手を選ぶときには前もってプログラムで住所を選別してしまえばいい

enumだとこんな感じ

enum city {
case 福岡
case 熊本
case 長崎
case 大分
case 佐賀
case 宮崎
case 鹿児島

case その他



で、caseはそれ自体をSwitch文やif文で分類して扱うことができるため、辞書型のようなデータをcaseで分類して扱うことができるようになる

例えばif文でif 〇〇 == city.福岡みたいに福岡県の人だけを集めてもいいしSwitch文で福岡と佐賀と熊本の人だけを集めてもいい


あるいはさらに女性か男性かでも分類してもよい

caseは自分で考えた分類属性をデータに与えるためのものである

なんなら.mp4とか.mp3みたいな拡張子の書き方にも近いかも

Swiftで機械音声に文字列を読み上げさせるにはこれが最短

Swiftで文字列を読み上げさせるにはどうすればいいかをすぐ使える情報として2020年1月20日時点の情報を残しておこうと思う

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
import UIKit
import AVFoundation

var sound:AVSpeechSynthesizer = AVSpeechSynthesizer()

let speech = AVSpeechUtterance(string: String(”文字列”))
speech.voice = AVSpeechSynthesisVoice(language: "ja-JP")

sound.speak(oo)

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜



これで文字列を読み上げさせることができる


上記はプレイグラウンド用だが、実際にはvar rr:AVSpeechSynthesizer = AVSpeechSynthesizer()をクラスのすぐ下に、残りを関数の中やoverride funcの中に使うタイミングに合わせて書く


注意点は話す内容である AVSpeechUtteranceの中身が必ずStringの型になっている必要があるという点で、うまく行かないときはprint()関数で中身を確認して調整するとよい

Swiftでfor文をfuncで書くときの書き方 

Swiftを書いていてこういう時ないだろうか?


for文を含む関数使いてえ・・・・


という時


私はforを含む関数を書くときに行き詰まったので、わからない人のために残しておこうと思う



まず、forはこんな構造をしている


for <#item#> in <#items#> {
<#code#>
}

for文ではinの左側に定数を定義して、for文の処理部分 <#code#>の中で代入した部分に、定義した定数へinの右側の配列から1つづつ代入していき処理をしていく、そして処理によっては結果をいれとくようの配列も必要になる


つまりfor文を作るにはinの左側で、初めて定義される定数①と、inの右側に入れるあらかじめ準備された配列②そして文字列を保管しておく空の配列③が場合により必要になる

//メッセージを作る

let cityList:[String] = ["Hongkong","Tokyo","Fukuoka"] //あらかじめ準備された配列②

var cityMessage:[String] = []//for文で作った文字列を保存する用の空の配列③

①//初めて定義される定数 Commandボタンを押してクイックヘルプを見るとよい
 ↓
for city in cityList {
let welcomeMessage:String = "welcome to (cityList)"// (cityList)の前にバックスラッシュが入る(FC2ブログだとバックスラッシュ打てない)
cityMessage.append(welcomeMessage)
}

これでcityMessageの中にwelcome to 〇〇〇〇が作られて順番に保管されていくわけだが、これを関数で書くときには上の3つの要素をそれぞれ関数として書くことになる


初めて定義される定数①
inの右側に入れるあらかじめ準備された配列②
文字列を保管しておく空の配列③


funcを書くときに重要なのは、だ、なぜならfuncは処理を書くわけで文字列をどうする?整数をどうする?という処理を書くことになる


だからまず上記の3つの要素をそれぞれ文字列か整数かを考えてみると、今回はそれぞれ文字列のStringと文字列の配列[String]であることがわかる

初めて定義される定数①   これはString
inの右側に入れるあらかじめ準備された配列② これは[String]
文字列を保管しておく空の配列③   これも[String]


このうちfor文を処理するfuncの中で使われる2つの因数の型はわかった

func messageMaker(:String,:[String]){

}



で、引数名だがこれは用途を考慮して名付けていく、ちなみにSwiftはアルファベット以外にひらがなカタカナ漢字でも引数名がつけられる、まあ好きにつければ良い

func messageMaker(a:String,b:[String]){

}


で、for文を書くわけだがここからは引数名を使わないといけないというのが通常のforと違うところだ

func messageMaker(a:String,b:[String]){

for a in b {
let welcomeMessage:String = "welcome to (a)"// (a)の前にバックスラッシュが入る(FC2ブログだとバックスラッシュ打てない)
cityMessage.append(welcomeMessage)
}

}



これでwelcome to 〇〇〇〇の配列をそれぞれ作ることができるようになった


そしてここが一番重要なのだが、funcの中で書かれたfor文のinの左側は、空である必要がある


つまり、空の文字列である必要があるのだ

これはなぜかというと上で書いたとおり、for文のinの左側は、for文の処理の中で臨時的に使われる空の定数であり、関数の中でfor文が使われる時、forの左側の定数は空である必要があるからだ

だから臨時的に定数で空の文字列を準備し、これを関数messageMakerの中に代入してあげる必要がある


let blancString:String = ""//こんな感じ

これでやっと関数messageMakerを使う体制ができた

関数を使うにはmessageMaker(a:blancString,b:cityList)と書けば良くこれでやっとfuncの中でfor文を使うことができるようになった


以下完成

let cityList:[String] = ["Hongkong","Tokyo","Fukuoka"]
var cityMessage:[String] = []
let blancString:String = ""

func messageMaker(a:String,b:[String]){

for a in b {
let welcomeMessage:String = "welcome to (a)"// (a)の前にバックスラッシュが入る(FC2ブログだとバックスラッシュ打てない)
cityMessage.append(welcomeMessage)
}

}

使用

messageMaker(a:blancString,b:cityList)
print( cityMessage[0])



最後に全角と半角を切り替えながら書いたので念の為に画像を貼っておきたい

for文をfuncの中で書きたい Swift ソシアルアドバンテージ令和元年12月9日

スクロールビューをSwiftで活用する3行のコード

Swiftのスクロールビューの使い方がわかりにくかったので初心者向けにスクロールビューを3行で使えるコードを教えたいと思う


import UIKit

class ViewController: UIViewController {

@IBOutlet weak var scro: UIScrollView!

override func viewDidLoad() {
super.viewDidLoad()

scro.frame = self.view.frame
scro.contentSize = CGSize(width: 375, height: 2000)
self.view.addSubview(scro)


}


}


これであなたもSwiftのスクロールビューが使える!

赤線の部分を解説すると

scro.frame = self.view.frame

はスクロールビューの枠の大きさがviewと同じですと宣言している部分で


scro.contentSize = CGSize(width: 375, height: 2000)

ここでスクロールビューの中の広さを示している

この時重要なのはスクロールビューはviewの上にあるわけだが、frameがアイフォンの画面上でのスクロールビューの大きさを決めcontentSizeはスクロールビューの中で動く範囲を示しているという点だ

これは言うなれば窓と部屋の関係みたいなものでフレームという窓を大きくすれば部屋の中が一度に見渡せ、その一方でフレームが大きいとアイフォンの画面の中の面積を広く使ってしまうというようなものだ


フレームという窓が大きければ一度にスクロールビューの中を多く見渡せる、逆にコンテンツサイズが大きければ小さいフレームだと一度には見れない

そういうものだ


self.view.addSubview(scro)

そしてこの部分でスクロールビューであるscroをviewの上に載せている



この3行でスクロールビューを使うことができる


ただし、これはフレームをviewと同じ大きさにしているためviewの中の1部分だけスクロールビューにしたい場合はscro.frame = self.view.frameの右側を適宣書き換える必要がある




ちなみにスクロールビューの上にラベルを載せる場合はaddSubviewの部分をself.scro.addSubview(label)と書きviewの上でなくスクロールビューの上にラベルが載るように書くことが大事である