X



Swift part12
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ af5b-F79V)
垢版 |
2018/10/29(月) 22:08:16.87ID:gm+ugNlu0
!extend::vvvvv

WWDC2014で発表されたAppleの新言語Swiftについて語りましょう

関連スレ

プログラミング言語Swift Part4
http://egg.2ch.net/test/read.cgi/mac/1484763495/

[SDK]iPhoneアプリ開発初心者質問箱49[touch][iPad]
https://egg.5ch.net/test/read.cgi/mac/1538778915/

Xcode part14
http://egg.2ch.net/test/read.cgi/mac/1476190499/

Swiftアンチスレ part1
http://mevius.2ch.net/test/read.cgi/tech/1458491343/

前スレ
Swift part11
https://mevius.5ch.net/test/read.cgi/tech/1498640309/

スレ立て時は1行目に「!extend::vvvvv」
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0106デフォルトの名無しさん (ワッチョイ 928c-w5dY)
垢版 |
2019/04/23(火) 14:29:52.93ID:eM8URmwI0
処理中にメモリー使用量が増えていくとの書き込みも有りましたが、Instrumentsを起動してAllocationsで#Persistentを確かめた感じでしょうか。
0108デフォルトの名無しさん (ワッチョイ b12c-Ea22)
垢版 |
2019/04/23(火) 14:46:02.85ID:FQZTVnj/0
こ、こんなツール知らなかった!
なんか便利そうな感じです。
見た感じループ1週でチョビチョビ増えてる感じですね、データベースへの書き込み処理と読み込みかな?
問題はない感じっぽいです、このツールすごい
0110デフォルトの名無しさん (ワッチョイ 928c-w5dY)
垢版 |
2019/04/23(火) 15:12:05.68ID:eM8URmwI0
#Persis tentは廃棄されずに存続しているオブジェクトです。もしここが増え続けている様ですと、強参照が疑われます。
また、iOSではラベルの更新などにはプロパティオブザーバーを使う事がよくあります。
プロパティ毎に、値が更新された時に実行する処理を指定できます。
var score = 0 { didSet { scoreLavel.text = “Score : \(score)”} }
といった感じです。
macOSでも同様かは解りませんが...
ご参考まで、
0111デフォルトの名無しさん (ワッチョイ f666-dCbv)
垢版 |
2019/04/23(火) 19:09:15.92ID:zVNwrrWL0
ディスプレイのスリープやスクリーンセーバでプロセスがサスペンド(?)するのはちょっと考えられないけど(もしかしてもしかしてmacOSのナンかあるかもだけど)、
https://developer.apple.com/library/archive/qa/qa1340/_index.html
Listing 2 Preventing sleep using I/O Kit in Mac OS X 10.6 Snow Leopard
で、プログラムからMacのスリープやディスプレイのスリープを抑制(というかしないように)ができるよ

アクティビティモニタで状態は確認できる。「非スリープ」の項目。出てない場合はリストタイトルを右クリックで
IOPMAssertionCreateWithName で はい
IOPMAssertionRelease で いいえ
「はい」のプロセスがひとつでもあればスリープしない
0113デフォルトの名無しさん (ワッチョイ b12c-Ea22)
垢版 |
2019/04/24(水) 13:25:01.92ID:mjBvBaH40
IOPMAssertionCreateWithNameを使ってNoIdleSleepを設定することで回避できたようです。
よく考えてみるとシステムがスリープになるとプロセスが止まるのは当たり前のことなのですね、気づく事が出来なくて恥ずかしいですが今後の糧とします。

皆さん本当にありがとうございました。
0114デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 01:28:52.91ID:CHSOWKq90
ここでiOSのswift playgrounds の質問して良いですか??
0117デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 10:38:14.63ID:DVQuNbO80
SPgのアプリの操作や、教育シナリオについての質問だと対応したもんか困るな。
Swiftのゴードに関する質問なら全く問題無い。
0118デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 10:39:01.20ID:DVQuNbO80
ゴードって何??
コードね。
0119デフォルトの名無しさん (ワッチョイ a7b3-XCiU)
垢版 |
2019/05/28(火) 12:01:34.71ID:w4zZ1fDo0
ありがとうございます!

プログラミング初心者で、初めてiPadでプログラムに触れて、すごい楽しんでいます。
ただ、今、同じ処理をするのに、エラーが出るコードとエラーが出ないちょっと違うコードの違いがわからなくて、悩んでいます。

分かっている人にはしょうもない質問かもしれないですが、自宅に帰ったら書かせていただきます!
0120デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 19:39:17.29ID:CHSOWKq90
すみません教えてください

swift playgrounds コードを学ぼう2 の 「ステージを作るー道をつなぐ」をやっています。

島の中の座標(2.2)にブロックを2個置きたいのですが、下のパターンAはエラーが出るのに、パターンBはエラーが出ません。

やろうとしてることは同じだと思うんですが、なんでパターンBは上手くいくんでしょうか??

//パターンA
//ブロックの再宣言が無効ですのエラーが出る
let block = Block()
world.place(block, atColumn: 2, row: 2)
let block = Block()
world.place(block, atColumn: 2, row: 2)

//パターンB
//問題なく2個のブロックが置かれる
for i in 1 ... 2 {
let block = Block()
world.place(block, atColumn: 2, row: 2)
}


よろしくお願いします。
0121デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 19:50:39.55ID:DVQuNbO80
ループ内での定数宣言は各回、改めて行われているので問題無いが、エラーが起きるコードでは同じ定数が複数回宣言されているのでエラーとなる。

なお、ループ定数のiもループ内で使用されていないので、本来はワイルドカードを使用するのが望ましい。

for _ in 1...2 {
....
}
0122デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 19:54:00.30ID:DVQuNbO80
これなら通るでしょう。

let block = Block()
world.place(block, atColumn: 2, row: 2)
world.place(block, atColumn: 2, row: 2)
0123デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 20:17:26.95ID:CHSOWKq90
>>121
ありがとうございます!
ループ内の定数宣言について、はっきりと理解していないのですが、今後勉強します。

ループ定数iの件も今理解できないですが、ちょっと勉強します。

>>122
これも試したのですが、一個目のブロックは置かれるのですが、それが消えてから二個目のブロックが置かれてしまって結局1個しかブロックが置かれませんでした。
それも意味がわかりませんでした。。。

ちなみにこれは上手く行きました。当たり前ですが。。。
let block1 = Block()
world.place(block1, atColumn: 2, row: 2)
let block2 = Block()
world.place(block2, atColumn: 2, row: 2)
0124デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 20:21:32.57ID:DVQuNbO80
>>123
あ、それはそう。
同じブロックを動かしてるから。
二つ置くなら、ブロックも二つ作らなきゃ駄目。
0125デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 20:35:44.65ID:CHSOWKq90
>>124
ありがとうございます!

ちょっといろいろ試して勉強します!

コード学ぼう2の配列の項目になると、すごく難しいのでまた質問させてください。。。

ありがとうございました!
0126デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 20:38:11.70ID:DVQuNbO80
ループ内で宣言された定数blokは、一回ループすると破棄されてる。
で、次のループでまた「新たな定数として」宣言されてる。

for _ in 1...2 {
let block = Block() //定数blockが宣言され、Blockが格納された
world.place(block, atColumn: 2, row: 2) //worldがplace()を実行
} //定数blockは破棄→次のループへ
0127デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 21:03:01.13ID:CHSOWKq90
>>126
ありがとうございます!
理解できました!

それってローカルスコープって言うものと関係があるのでしょうか?

ローカルスコープ内で宣言された定数がそのループ内で下まで行って、
それで宣言されたのは消えるけど、ブロックは残る。
でまたループの最初で新たに宣言されて、同じ名前のブロックだけど、1個目のブロックとは違う2個目のブロックが作られるってことですね!

ありがとうございます!
0128デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/28(火) 21:06:57.09ID:CHSOWKq90
親切にありがとうございます。

プログラム面白いです!
0129デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 21:26:26.57ID:DVQuNbO80
>>127
スコープの話はその通り。
ブロックに関しては、その入れ物である定数が破棄された時点で同時に破棄されてる。
画面は書き換えられてないから、絵としては残ってるけど。
0130デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 21:29:38.21ID:DVQuNbO80
知識と実験結果が繋がるとワクワクするよね。
0131デフォルトの名無しさん (ワッチョイ df8c-kH1c)
垢版 |
2019/05/28(火) 22:06:12.86ID:DVQuNbO80
>>122のコードだと、スコープ内だから定数blockも、そこに格納されてるブロックも「そのまま」残ってる。
で、先ず一回めのplace()でブロックがcolumn 2, row2に置かれる。
そして、その同じブロックがまたplace()で使われて、同じ位置に置き直されてる。

だから一旦消える。
0132デフォルトの名無しさん (ワッチョイ ff02-14KV)
垢版 |
2019/05/29(水) 01:28:22.62ID:n5wrmHwb0
>>129
>>131
ありがとうございます!
このブロックが消える残るの違い、分かりそうな分かってなさそうなです...

じっくり考えます!
0135デフォルトの名無しさん (ワッチョイ 6a8c-WHxb)
垢版 |
2019/06/05(水) 09:37:29.67ID:bn8XLE5n0
癖になっちゃうみたいよ
0136デフォルトの名無しさん (ワッチョイ 6a8c-WHxb)
垢版 |
2019/06/05(水) 11:12:50.80ID:bn8XLE5n0
手持ちのiOS向けコードをmacOS向けにビルドしてみてる。
拍子抜けするほど簡単。
iOSはスレッドの選択に寛容なのだと分かった^_^
iOSで引っ掛からなかったミスをmacOS向けだとキッチリ指摘される。
お陰でiOS向けの動作も改善できた(^^;;
013892 (ワッチョイ 5384-nFRp)
垢版 |
2019/06/07(金) 13:11:36.86ID:RiGAEFOd0
わりと簡単な2画面使うアプリのソース無料でかどこかに落ちてないですかね。
一通り言語の勉強は終わったので、マニュアルの課題よりちょっと上の画像扱うアプリのソースとか見てみたい
0139デフォルトの名無しさん (ワッチョイ 038c-FZF1)
垢版 |
2019/06/07(金) 13:26:18.96ID:jIZKE2jv0
>>138
チュートリアルとしてはこれとか。
https://www.hackingwithswift.com/100/16
サンプルソースコードへのリンクも記事の中に有るよ。
ただし、よくあるstoryboardのセグエを使うやり方じゃ無いけど。
0141デフォルトの名無しさん (ワッチョイ 038c-FZF1)
垢版 |
2019/06/08(土) 13:59:27.79ID:wruTQcwg0
SwiftUIはDateFormatterのロケールに未対応だね
0142デフォルトの名無しさん (ワッチョイ 5a00-LWbF)
垢版 |
2019/06/18(火) 02:19:23.63ID:tbAp2v6F0
すみません、教えてください。
今とあるWebサイトに載っている
プログラムの意味を一つずつ調べていまして、

let okHandler: () -> Void = { handler in
if let textField = alertController.textFields?.first {
completionHandler(textField.text)
} else {
completionHandler("")
}
}

の構文がどうなっているのか、全然分かりません。
{ handler in ・・・ からは、
引数も戻り値も無いクロージャーと思っていますが、
正しいでしょうか?
あと、
let okHandler: () -> Void = { handler in
って、
let okHandler = { handler in
ではだめでしょうか?
0143デフォルトの名無しさん (ワッチョイ 8b01-p7Vn)
垢版 |
2019/06/18(火) 07:44:59.45ID:RRPGT4du0
>>142
分解して理解する
let 変数名: 型 = 値

【型】
クロージャ型の場合さらに分解して
(引数型宣言) -> 戻り値型

「引数無し」は「空のタプルを1つ」と同等として扱われる
また、Void型は空のタプル型のエイリアス
Void = ()

以下は全て同じ型「() -> ()」になる
let okHandler: () -> Void = {}
let a: (Void) -> Void = okHandler
let b: () -> () = okHandler
let c: (()) -> (()) = okHandler
let d: ((())) -> ((())) = okHandler

【値】
クロージャの場合
{引数定義 in 本体}
今回の方の場合、handlerは空のタプル型の引数となる

クロージャ型を省略するとhandlerの型が不明になりコンパイル出来ない
handlerの型を明示するか「引数定義 in」を省略すれば可能
let okHandler = { (handler:Void) in }
let okHandler = { }
0144デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 09:19:46.79ID:MqxFux0r0
引数をとらないクロージャー() -> Voidとしているのに{ handler in ....}というは通らないのでは。
クロージャー内でもhandlerは使われていないし。
0145デフォルトの名無しさん (ワッチョイ 8b01-GEyX)
垢版 |
2019/06/18(火) 10:13:56.93ID:RRPGT4du0
すまん、Swift4からは引数型宣言とタプル型の区別が厳密化した影響で通らなくなってるな
https://github.com/apple/swift-evolution/blob/master/proposals/0110-distingish-single-tuple-arg.md

>>143を訂正
>「引数無し」は「空のタプルを1つ」と同等として扱われる
これはSwift3までで、Swift4以降は間違い

空のタプルを1つなら以下になる
let okHandler: (()) -> Void = { handler in }
let a: (Void) -> Void = okHandler
let b: (()) -> () = okHandler
let c: (()) -> (()) = okHandler
let d: ((())) -> ((())) = okHandler
let okHandler2 = { (handler:()) in }

引数無しなら引数は書けない
let okHandler3 = { }

さらにSwift4→Swift5でも型の文字列化が変更されているようで
print(type(of: { (handler:()) in } ))

  Swift4では () -> ()
  Swift5では (()) -> ()
と表示される
0146デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 10:37:29.39ID:MqxFux0r0
>{ handler in ・・・ からは、
>引数も戻り値も無いクロージャーと思っていますが、
>正しいでしょうか?

正しい。但し、クロージャー内の’handler in’は現在は通らない。


>let okHandler: () -> Void = { handler in
>って、
>let okHandler = { handler in
>ではだめでしょうか?

そもそも、
let okHandler: () -> Void = { handler in
では現在は通らない。

let okHandler: () -> Void = { () in
let okHandler: () -> Void = {
let okHandler = {
let okHandler = { () in
これらは通る。

という事ですね。
0147デフォルトの名無しさん (JP 0H7f-LWbF)
垢版 |
2019/06/18(火) 18:47:59.54ID:/CgxXLZnH
>>142 です。
>>143>>144
ありがとうございます!ほんと凄いです。
お伝えしていませんでしたが、swift3でした。
失礼しました。
油断したらまた何だったっけ?ってなりそうですが、
「タプル」「空のタプル」で検索したりして、
かなり分かりました。

let okHandler = {
でいいような・・・。

ところで、分かってきて、また疑問が湧いてきました。

// 引数と戻り値のないクロージャ
let closure = { () -> Void in print("クロージャテスト") }
closure()

let closure: () -> Void = { print("クロージャテスト") }
closure()

って、同じ意味だと思いますが、
なぜ、
let closure: () -> Void = { print("クロージャテスト") }
の形(今回質問させていただきましたクロージャー型={}の形)
なのか分かりますでしょうか?
好みの問題でしょうか?

let closure: () -> Void;
closure = { print("クロージャテスト") }
closure()
なら、なんとなく分かりますが。
0148デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:12:11.36ID:MqxFux0r0
変数、定数の宣言は、型が推定できるか、または明示されていることが絶対条件ですので、値を指定しない限り型を明示する必要があります。
ですので、基本的には

let 定数名: 型
var 変数名: 型

となる訳です。
この場合、値は後で代入する事になります。

定数名 = 値
変数名 = 値

この二段階を一度に行う事が可能で、

let 定数名: 型 = 値
var 変数名: 型 = 値

という書式になります。
この時、していされた「値」によって、定数(変数)の型を推定する事ができるので、型宣言を省略可能になります。

let 定数名 = 値
var 変数名: = 値

どの書き方をするかは基本的に自由です。
読み易さやメンテナンスのし易さ、その他の事情に応じて自分で判断します。
0149デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:14:33.84ID:MqxFux0r0
修正
誤)var 変数名: = 値
正)var 変数名 = 値
0150デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:22:36.30ID:MqxFux0r0
ざっくり書きますが、
クロージャー型宣言部分での引数、戻り値の記述、クロージャー(値)部分でのそれも、基本的には両方とも「書く」のです。

が、どちらかで書かれていれば他方は推定可能なので省略でき、更に両方で書かれていない場合は「引数も戻り値も無いのだな」と推定可能なので書式として通る

そんな感じです。
0151デフォルトの名無しさん (ワッチョイ 9a8c-6ILD)
垢版 |
2019/06/18(火) 19:32:52.12ID:MqxFux0r0
ちなみに

let 定数名: 型 = 値
var 変数名: 型 = 値

この書き方には、型を「確実に」指定出来るというメリットが有ります。

値が「1.0」である時、この値を割り当てられた変数の型は
float でしょうか、それともdouble でしょうか。
どの型であるかでプログラムに不都合が起きる場合、推定に任せるわけにはいきません。
この様な場合には上記の型を明示する書式が採用されます。
0152デフォルトの名無しさん (ワッチョイ 8b01-GEyX)
垢版 |
2019/06/18(火) 20:04:30.62ID:RRPGT4du0
>>147
戻り値まで指定しているその2例だと好みの問題かな

戻り値を指定しない場合は
最後のステートメント次第で型が変わる可能性がある

func print2(_ s:String) -> Int {
print(s)
return 10
}
let closure1:() -> Void = { print2("クロージャテスト") }
let closure2 = { print2("クロージャテスト") }

closure1は () -> Void
closure2は () -> Int

---

個人的にはトレーリングクロージャで使えるクロージャ側で指定する方が好み
func arr2<T>(_ f:()->T) -> [T] { return [f(),f()] }
let a = arr2 { () -> UInt8 in 10*2 }
print(type(of: a ), a) // Array<UInt8> [20, 20]
0153デフォルトの名無しさん (ワッチョイ 5a00-LWbF)
垢版 |
2019/06/19(水) 01:46:47.34ID:J6hmOODE0
>>147 です。
>>151>>152
ありがとうございました!
正直、大変失礼ながら、
こんなにちゃんと教えていただけるとは思っていなかったです。
大変感謝しております。

なるほど、なるほどの連続で、
「個人的にはトレーリングクロージャで使えるクロージャ側で指定する方が好み」
のところが全然分かりませんでしたが。w

また進化して戻ってきます!
0154デフォルトの名無しさん (ドコグロ MMf7-8cV5)
垢版 |
2019/06/19(水) 18:16:34.43ID:2JA7n6eeM
Swift Playgroundsどぅょ
0155デフォルトの名無しさん (JP 0H8d-F2Fz)
垢版 |
2019/06/20(木) 10:32:09.63ID:39UUBS39H
Swiftを始めてみたいんだけどMacが必要らしくてMac miniかMacbookを買おうと思ってる(高い)
こどおじだからMac miniでいいかな?

実際に開発してる者の意見を聞きたい(開発上の利便性とか速度とか)
0156デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 10:49:25.55ID:po6GQ3Kk0
プロジェクトの規模による。
始めてみる程度ならMacBook Airでも問題無い。
サブディスプレイの有無で作業効率がかなり違うので、出来れば用意したほうが良いと思う。
実機テストにも使えるし、サブディスプレイにもなるのでiPadはお勧め。
iPadは、サブディスプレイ接続しなくても資料の表示にはかなり役立つ。
MacとiPadは相互にコピペ出来るし、その他の連携も良い。
0157デフォルトの名無しさん (JP 0H8d-F2Fz)
垢版 |
2019/06/20(木) 11:49:37.55ID:39UUBS39H
>>156
ありがとう!
0158デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 16:23:44.57ID:po6GQ3Kk0
プログラミングの学習を始める時は機材もそうだけど教材も重要。
実際に打ち込んで結果を確認しての繰り返しなんで、「次に何をやるか」のネタが尽きない事が大事。
英語にアレルギーが無ければ、↓のサイトがお勧め。
https://www.hackingwithswift.com/100/

Swiftの基礎から、そこそこ自分で組める見通しが立つ程度まで100日間のコースが組まれてる。
最新の環境に更新されているし、ソースコードを含めて全て無料。
100日間、ネタが尽きない。
0160デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 20:39:38.74ID:po6GQ3Kk0
日本語だと、なるべく新しい本を買うのがお勧めかな...
ネットの情報は新旧錯綜してるし、当のAppleも日本語のガイドや入門コースは更新が送れてる(^^;;
Appleの入門コース、内容は凄く良いんだけどね。無料だし。
0161デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 20:42:51.91ID:po6GQ3Kk0
Xcode10、Swift4以上で。
0163デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 21:48:41.43ID:po6GQ3Kk0
技術系の本は出てくる用語が限られてるし、下手くそな文章は別にして、大抵よく整ってるから意外と読めちゃうよね。
0165デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/20(木) 22:08:45.14ID:po6GQ3Kk0
まあ、まずは取っ掛かる事だわな。
続けてりゃ、後から色々ついてくるもんだし。
0166デフォルトの名無しさん (ワッチョイ 4b2d-br4T)
垢版 |
2019/06/20(木) 22:41:08.00ID:1p12e0x80
ある程度知ってるものについて英語の文献を読むのならまだしも、知らないものについてゼロから学習するのは辛いものがあるからな
0169デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/21(金) 19:30:28.62ID:x2Q7O92u0
macOSやiOSには辞書が標準でインストールされてるし、わからない単語はその場で確認出来るしね。
全くの初学なら基本的な型や制御文、UI部品の幾つかについては日本語のテキストで学んで用語をある程度頭に入れたら、英語のテキストに取り組むと良いかもね。

いかんせん、日本語の書籍のサンプルコードは断片的でつまらないし、応用も効きにくいんだよなぁ...

ほんと、Appleの入門コース日本語版は早くアップデートすべきだと思うよ。
0171デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/22(土) 21:31:00.60ID:dZAW+YMM0
そりゃそうだろ。
0173デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/22(土) 22:19:44.53ID:dZAW+YMM0
「iOSアプリをmacOSで使える様になる」「統合される」なんて言う連中が未だに居るからね。
「iPadでmacOSアプリ使える様にしろ」とかさ。
あり得ないっつーの。
0174デフォルトの名無しさん (ワッチョイ f101-br4T)
垢版 |
2019/06/22(土) 23:04:03.22ID:EOmKKZcH0
>>173
Windowsで出来ているんだから、Appleでもできるだろ。
0175デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/22(土) 23:06:31.47ID:dZAW+YMM0
>>174
あれはやらかしちまったって言うんだよ。
0177デフォルトの名無しさん (ワッチョイ 09ad-0kke)
垢版 |
2019/06/23(日) 08:59:37.11ID:7n7bL/oO0
だってMacアプリ少なすぎて
おまえらがiOSアプリしか作らないのがあかん
0178デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 09:34:34.59ID:eEkgfOF60
少なすぎるって事は無いだろ。
catalystの狙いはmacOSアプリを増やすというより、両環境向けのアプリを増やす事で連携を高める事だろ。
0180デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 11:57:38.42ID:eEkgfOF60
iOS機器はネット端末のイメージが強いから、アプリもネットサービスを利用する感覚でダウンロードされやすい。
開発者にとってはそこが魅力。
0181デフォルトの名無しさん (ササクッテロル Sp8d-LuMA)
垢版 |
2019/06/23(日) 18:27:39.50ID:5aOx2AkLp
概念としては何度も提唱されていたMVC(モデル-ビュー-コントロール)って
プログラム実体とUIと接続部に最初から分けて実装すれば変更と移植が楽になる。
ってのを実際にやったのがジョブズが90年代にやってたNeXTで
MacOSXはそれをAppleに持って来たもの。

で、システム、アプリの基本的なつくりがそうなっているので
モバイル用にモジュール入れ替えてUIをモバイル用にした
『MacOSXの別バージョンがiOS』(だったりtvOSだったりetc)

だからプログラム実体とUIとコントロールは独立しているはずなので
「その機種用のUIに置き換えれば楽に移植できるし、システム的にそういうつくりのはずだよね?」ってのが基本。
前提が「(従来は全書き換え作り直しだけど)」って前書き入り。

Appleの前提は「違う環境じゃ違うUIや構成になるから変えなきゃね」で基礎システムできた上の主張やビジョンだけど
MSのWindows10はなんかそのあたり理解しないで「(うちは基礎システム環境ごとに全書き換えだから)全ての環境で同じものが動くようにします!」だから
さすがにありゃ「バカじゃねぇの?」としか…
0182デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 18:52:14.66ID:eEkgfOF60
つうか、色々なサイズ重量の機種に載せるOSにデスクトップ用とタブレット用とを抱き合わせ、しかもタブレット環境の筈なのにデスクトップUIのアプリ走らせ...
支離滅裂でしょ。
当然、持ち運び不能な機種で余計なタブレットモードは有るわ、タブレットモードとは別枠で複数のUIは有るわ、タブレットでマウス必須のアプリが走るわ
当然、タブレットに最適化したアプリは増えんわ
デスクトップ用のアプリは変な風にタブレットの影響受けるわ(ここはAppleもやらかしとる)

んで、OSがそんなワケワカメなもんだから、虻蜂取らずな2in1なんてハードは出てくる(まあ、出さざるを得ないわな)わ...

ソフト屋の筈なのに、UIの作り込みやUXガン無視ってなんなん?

お陰でiPadをPCと混同する様な要望やら、OSを統合しろやら、ユーザーの要望を聞かないのは横暴だの、とんだとばっちりを食わされてる訳で。

大丈夫だとは思いつつ、いつかAppleがポリシーを曲げやしないかとハラハラするこの数年だわ。
0185デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 21:22:04.14ID:eEkgfOF60
ハード屋の方がソフトウェアの事が解ってる、またはソフト作りにポリシー持って仕事してるという皮肉
0188デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/23(日) 21:45:36.40ID:eEkgfOF60
ゴメンわかりづらくて。

しかも、主に言いたかったのは最後の二文だったりするし。
0189デフォルトの名無しさん (ワッチョイ 2bd3-0AHq)
垢版 |
2019/06/23(日) 23:25:31.97ID:ubRsEfW/0
>>181
> 概念としては何度も提唱されていたMVC(モデル-ビュー-コントロール)って
> プログラム実体とUIと接続部に最初から分けて実装すれば変更と移植が楽になる。
> ってのを実際にやったのがジョブズが90年代にやってたNeXTで

細かいことですが、MVCのCは「コントロール」ではなく「コントローラー」です^^;

あと、MVCは概念だけでなくNeXTよりずっと以前、1970年代終わり頃のSmalltalkで既に実装が試されています。
つまり、アラン・ケイたちが1970年代を通じて開発したダイナブックの暫定OSですね。
念のため、ケイたちのSmalltalkは暫定ダイナブックのOSとしては販売されませんでしたが
開発環境の「Smalltalk-80」としてLisaや旧Macより前に製品化されそこに古典的MVCも組み込まれています。

▼ジョブズが観た当時のアラン・ケイたちの暫定ダイナブックOS(Smalltalk-76)
https://commons.wikimedia.org/wiki/File:Smalltalk-76.blowup.png

ちなみにこのSmalltalk環境のGUIを1979年に観たジョブズがGUIという表層だけ真似てLisa/旧Macを作り
その後Appleを追い出されてから、ネットワークとOOPを追加して改めて真似て作ったのがNeXTです。

▼PARC訪問とNeXTの成り立ちに関連するジョブズの証言
https://vimeo.com/31813340#t=55m (55分あたりから)

▼↑の部分を書き起こしたもの
http://web.archive.org/web/20121016134054/http://americanhistory.si.edu/collections/comphist/sj1.html#soft
0191デフォルトの名無しさん (ワッチョイ 938c-1T9w)
垢版 |
2019/06/24(月) 06:40:57.89ID:DFxDoFyo0
プログラマーとしてのポリシーに関わる問題だから、あながちスレチとも言えない。
0194デフォルトの名無しさん (ワッチョイ a75f-ydV6)
垢版 |
2019/07/14(日) 19:54:56.64ID:GJCC6lLh0
混乱しています。教えて下さい。

UnsafeMutableRawPointerに対してmemcpy上書きした場合に
copyonwriteされないという理解で良いでしょうか。

あちこちググりまくりましたが、SwiftにおけるunmanagedとUnsafeの使い分けが理解できていません。
0195デフォルトの名無しさん (ワッチョイ e301-1toC)
垢版 |
2019/07/16(火) 11:55:20.33ID:6es9HJyW0
>>194
Unmanagedの先はAnyObject (型情報や参照カウンタ等を持っている)
UnsafePointerはただのポインタ値でその先が何かを関知しない

もちろんmemcpyにCopyOnWriteなんて処理は入っていない

SwiftのArrayやDictionaryがCopyOnWriteするのは
各メソッドがそうするように実装されてるから
0196デフォルトの名無しさん (ブーイモ MMba-ydV6)
垢版 |
2019/07/16(火) 14:56:47.81ID:TnSr9RUtM
コメントありがとうございます。
UnmanagedはあくまでAnyObjectを指すという考え方がわかりやすいです。
ポインタ操作ではCopyOnWriteされないのでホッとしました。
0198デフォルトの名無しさん (ワッチョイ dd5f-GOrT)
垢版 |
2019/09/09(月) 23:33:17.83ID:S91FFLD20
Swiftと言うかxcodeなんですが、どなたかお解りになる方はお教え下さい。
複数の画面を移動して、ほぼ同じ処理、音を出すアプリを作っています。

画面Aはボタンから
@IBAction func HameMinor(_ sender: Any) {
let soundUrl = Bundle.main.url(forResource: "HameMinor", withExtension: "mp3")
var soundId: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundUrl! as CFURL, &soundId)
AudioServicesPlaySystemSoundWithCompletion(soundId) {
}
}

で音は出ますが、画面Bも同じく
@IBAction func HameHarm(_ sender: Any) {
let soundUrl = Bundle.main.url(forResource: "HameHarm", withExtension: "mp3")
var soundId: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundUrl! as CFURL, &soundId)
AudioServicesPlaySystemSoundWithCompletion(soundId) {
}
}

としても音が鳴りません。どうしたら良いでしょうか?
0199デフォルトの名無しさん (ワッチョイ 428c-R0py)
垢版 |
2019/09/09(月) 23:59:20.45ID:zK3PHuiT0
HameHarm.mp3に問題が有るか、ここに挙げてある以外のコードに問題が有るかのどちらか
0200デフォルトの名無しさん (ワッチョイ dd5f-GOrT)
垢版 |
2019/09/10(火) 00:18:37.62ID:FKCbFxlZ0
>>199
ありがとうございます。
他にも沢山のmp3ファイルがあって、複数試しているのですが、別画面だけダメなんです。
何か別画面への定義とかあるんでしょうかね…?
0201デフォルトの名無しさん (ワッチョイ 428c-R0py)
垢版 |
2019/09/10(火) 00:33:32.10ID:iaAJy/CU0
同一のコードだけを並べて見せられても前記の答えしか出てこないよ。
同じものは何度見直しても同じだし、検証して確かに問題無いと言える筈の箇所は幾ら疑っても問題解決には繋がらない。
他の部分、他の理由に当たるべき。
0202デフォルトの名無しさん (ワッチョイ dd5f-GOrT)
垢版 |
2019/09/10(火) 01:05:05.33ID:FKCbFxlZ0
>>201
ありがとうございます。
そうですよね、「定義が無い」エラーを消して動かして原因を探っていましたが、判りません。
ググってもそれらしいのは出てきません。頑張って探してみます。
画面移行のボタンは正常に動くのになんでだろ…
0205デフォルトの名無しさん (ワッチョイ dd5f-GOrT)
垢版 |
2019/09/10(火) 01:40:19.72ID:FKCbFxlZ0
>>203
Bundle.main.urlの部分でしょうか? コピペで音源名だけ変えました。

>>204
あ、それどうやってやりますか? 定義や連結だと薄々思っています。

いずれ、ありがとうございます。希望が持てます!
■ このスレッドは過去ログ倉庫に格納されています