Swift part4 [転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/11/13(木) 15:39:01.67ID:TmOo0Hy+関連スレ
TypeScript(MS) VS Swift(Apple)
http://peace.2ch.net/test/read.cgi/tech/1401758403/
帰ってきた動的言語 VS 静的言語(代表Swift)
http://peace.2ch.net/test/read.cgi/tech/1401809550/
新言語Swiftを語るスレ
http://anago.2ch.net/test/read.cgi/mac/1401736249/
プログラミング言語Swift
http://anago.2ch.net/test/read.cgi/mac/1401736921/
前スレ
Swiftスレ
http://peace.2ch.net/test/read.cgi/tech/1401736341/
Swift part2
http://peace.2ch.net/test/read.cgi/tech/1402465335/
Swift part3
http://peace.2ch.net/test/read.cgi/tech/1406083608/
0561デフォルトの名無しさん
2015/02/13(金) 03:36:32.63ID:buPT00S0"key"を一旦変数に入れれば辞書の値は取得できる。
val k = "key"
"\(dicB[k])"
だけど、オプショナルなんでOptionalという文字列が付加される。
オプショナルについての条件判断を追加したほうがいいんじゃないの?
if let v = dicB["key"] {
取得した値vを使って文字列作成
}
0562デフォルトの名無しさん
2015/02/13(金) 07:51:40.67ID:lUySCnaCただし nil だと落ちる
0563デフォルトの名無しさん
2015/02/13(金) 12:38:22.60ID:iKg98AzIレスありがとです。
やっぱり一回変数に入れないとなんですね。
ちなみにオプショナルバインディングて、絶対に中身あるってわかってるものでも使っておいた方がいいんでしょうか?
例えばplistから配列作って使う場合みたいに中身が絶対nilじゃないケースで
0564デフォルトの名無しさん
2015/02/13(金) 15:03:19.62ID:SEI7NHmi0565デフォルトの名無しさん
2015/02/14(土) 21:52:32.61ID:qQK3AVz3関数内でいじくっても関数を呼び出した側では反映されない?
いじくったArrayやDictionaryを返り値として返すか、
inoutにすればOK?
0566デフォルトの名無しさん
2015/02/14(土) 22:57:54.44ID:yymPAXuRarray や dictionary はvalue type なので、関数の引数に指定した時はコピーされますよ。
0567デフォルトの名無しさん
2015/02/15(日) 09:16:28.92ID:ZBOaPrrY例えばModelで宣言してるクラスの変数を複数のVCから使う場合はそのインスタンスはAppDelegateに宣言して共有しちゃって問題ないですか?
それともprepareSegueでVC同士でインスタンスを都度渡すべき?
0568デフォルトの名無しさん
2015/02/15(日) 09:18:22.40ID:OwkhoVMFですよね。
というか引数は定数だからそもそもいじれなかった。
varつけていじっても値型だから呼び出し側には変化無くて(中身のオブジェクトとかいじったら変わるけど)
配列や辞書受け取って、いじった配列や辞書返す関数をつくるには
変えた後の配列や値を返り値として返すか、inoutつけて参照するかになるわけだ
0569デフォルトの名無しさん
2015/02/15(日) 11:02:14.80ID:oAveDeym0570デフォルトの名無しさん
2015/02/15(日) 11:42:17.34ID:I+Ksv/GK0571デフォルトの名無しさん
2015/02/15(日) 11:44:32.43ID:ZBOaPrrYセグエでってことですよね?
グローバルな宣言よりそっちのがいいんですかね
0572デフォルトの名無しさん
2015/02/15(日) 11:59:44.48ID:oAveDeymごめん>>569は>>568に向けてだった
0573デフォルトの名無しさん
2015/02/15(日) 12:15:41.26ID:ZBOaPrrYすみません勘違いしてしまいました汗
0574デフォルトの名無しさん
2015/02/15(日) 13:04:44.05ID:Bd6vSIe4それってModelをどこで確保しておくかってことじゃね?
たぶんこれという正解は無いので、個人的に作っているならどっちでもどこでもいいよw 仕事上では一部でしか参照しないのになんでもかんでもAppDelegateに入れんなよと思ったりするけど
0575デフォルトの名無しさん
2015/02/15(日) 16:15:08.10ID:4GZ3t+xSこのiOSアプリのMac版作るぞ〜って時に
作り直しの部分が少なくできるように
なってればいいのではないか。
0576デフォルトの名無しさん
2015/02/15(日) 18:26:35.75ID:6aDKSPw5MVCの元祖の言語SmalltalkがもうMVCモデルすてちゃったよ
0577デフォルトの名無しさん
2015/02/15(日) 18:57:42.60ID:bX6frV1s0578デフォルトの名無しさん
2015/02/15(日) 20:49:33.01ID:HN+lsg6ZSwiftと相性悪いと思う
0579デフォルトの名無しさん
2015/02/15(日) 21:57:04.36ID:VwlzZl8k捨ててはないと思うけど。
Smalltalk-80 の直系の子孫の VisualWorks はずっと MVC だし、
リリース前の v1 からフォークした Squeak(と、そこからさらにフォークした Pharo)は
Morphic という SELF 由来の GUI フレームワークに切り替わってはいるけど、
Morphic のウィジェットを使って MVC は実現されているし。
0580デフォルトの名無しさん
2015/02/16(月) 08:42:46.66ID:f+L9KC1fレスありがとうございます
例えばグローバル変数はなるべく使わない方がいいみたいに、〜がベターみたいな宣言位置があるのかと気にしていました
あまり拘る必要がなさそうで安心しました
とりあえずガシガシ書いてトライアンドエラーで学んでいきます
0581デフォルトの名無しさん
2015/02/16(月) 23:41:29.72ID:EqgM0b6a}
var dic1: [String:Any] = [
"a" : A()
]
var dic2: [String:Any] = [
"b" : dic1["a"]
]
var b = dic2["b"] as A
これキャストに失敗してクラッシュするのなんで?
Xcode 6.1.1
0582デフォルトの名無しさん
2015/02/17(火) 01:16:27.91ID:h4FzBcNNdic1["a"] は Any? 型だから dic2 は [String: Any] 型じゃなくて [String: Any?] 型にしないといけない。
あるいは dic2 を [String: Any] 型のまま行くなら dic2 に突っ込む時にオプショナル外さないといけない
var dic2: [String: Any?] = ["b": dic1["a"]]
または
var dic2: [String: Any] = ["b": dic1["a"]!]
0583デフォルトの名無しさん
2015/02/17(火) 02:33:32.25ID:q2NMkJsxAny型の変数にOptionalをUnwrapしないでそのまま代入できるけどその場合どうやってUnwrapするの?
let str:String? = "string”
let anyStr:Any = str
if let s = anyStr as? String{
println(s)//実行されない
}
0584デフォルトの名無しさん
2015/02/17(火) 10:19:13.17ID:lqlm+AeY0585デフォルトの名無しさん
2015/02/17(火) 20:39:55.71ID:q2NMkJsx色々やってみたんだけど正直分からなかった
非OptionalからOptionalへのキャストがエラーになるのはそもそもSwiftが「変数の型が非Optionalだけど中身はOptional」な状況を想定してないから「変数の型が非OptionalなのにOptionalにキャストするのはおかしい」と判断してるからだろうね
多分「Any型の変数使う場合は必ずOptionalにしろ」しか対策ないと思う
0586デフォルトの名無しさん
2015/02/17(火) 21:14:15.05ID:RqkpPCDBhttp://stackoverflow.com/questions/27989094/how-to-unwrap-an-optional-value-from-any-type
ここに同じ様な問題で Int? の場合があったけど、ドキュメントに載っていない reflect を使う解決法が載ってる。
#reflect って初めて知ったけど。
ちなみに、
let str:String? = "str"
let anyStr:Any? = str
if let x = anyStr as? String
は動作しますね。
0587デフォルトの名無しさん
2015/02/17(火) 22:49:23.99ID:lqlm+AeYSwift詳しすぎたろどんだけ愛してるんだ
0588デフォルトの名無しさん
2015/02/17(火) 23:25:10.22ID:h4FzBcNN0589583
2015/02/18(水) 01:10:01.76ID:PG0yrYqrMirroTypeは色々面白そうだけどあまりお世話になりたくはないかなw
0590デフォルトの名無しさん
2015/02/18(水) 02:44:49.48ID:EaNt20NSDictionaryやArrayは必ずOptionalを返すからじゃないの?
0591デフォルトの名無しさん
2015/02/18(水) 21:03:01.10ID:p402jgdkそれなら非オプショナルの辞書にオプショナル入れようとした時点でコンパイルエラーになって欲しい気がするんだけど…
それにAnyだろうとAny?だろうと実際の型がAならキャストできると思うんだけど、
キャストできないってことは中身はAではなくなってしまうの?
だとすればどの時点でAではなくなるのか?
Aでないとすれば実際の型は何か?
元のA型のオブジェクトはどこにいったのか?
0592デフォルトの名無しさん
2015/02/18(水) 21:48:31.98ID:QUK3YI5Rだから入るのは仕方ない
あと中身はAそのものじゃなくA?だからキャストできないんじゃないか?
0593デフォルトの名無しさん
2015/02/18(水) 22:41:21.03ID:58KY8dA50594デフォルトの名無しさん
2015/02/19(木) 02:32:43.00ID:WJfndVBCえっと、わかった、つまり
オプショナルをネストすると、アンラップしても元の型に戻らないってことか
オプショナルを辞書に入れるときにアンラップしないとオプショナルのまま入って取り出すとオプショナルがネストされたものが返されてしまうんだな
Optional<Optional<A>>をアンラップしたらOptional<A>であってAではないからキャストに失敗するんだな
めんどくさい(小並感)
0595デフォルトの名無しさん
2015/02/19(木) 05:36:13.10ID:lzq5WWDP0596デフォルトの名無しさん
2015/02/19(木) 09:45:48.63ID:ybiW+36S0597デフォルトの名無しさん
2015/02/19(木) 23:00:33.51ID:eKjo0MpIlet optOptStr:Optional<Optional<String>> = "String"
みたいなOptionalのネストはOptional Bindingをネストすれば面倒くさいけどUnwrapできる
if let optStr = optOptStr {
if let str = optStr {
println(str)//実行される
}
}
中身が非nilだと確信が持てるなら
println(optOptStr!!)
でもいいけど
>>592が言いたいのはOptional型の値も非OptionalのAny型の範疇になるため
一見Unwrapしないと代入できなさそうな>>583みたいなコードもエラーを吐かずに通ってしまうという事
さらに変数の型はOptionalを許容してないのに中身の値の型はOptionalという矛盾した状態を作ってしまうため>>586のリンンク先にあるunwrap関数みたいなものを自作しないとUnwrapできくなる
0598デフォルトの名無しさん
2015/02/20(金) 02:19:24.41ID:8Wdi/5E9無駄にコードが分かり辛くなるからやめたほうが良いと思う
上の例だと答えてる人がいたように
var dict2: [String: Any] = ["b": dict1["a"]!]
みたいにその都度unwrapするのがいいんじゃない?
0599デフォルトの名無しさん
2015/02/20(金) 03:32:39.83ID:d89dlcycオプショナルがネストできてしまうのが微妙
オプショナルが言語の機能というよりもひとつの型として定義されてるからなんだろうけど
ひとつの型にしてしまうとAnyに入ってしまう
オプショナルをジェネリックな型としてではなく言語機能として組み込んで
Any?をAnyではなくして
オプショナルをネストできないようにすればいいと思う
オプショナルがネストされて嬉しいことってあるか?
せめてネストされててもアンラップしたときに再帰的にアンラップされればいいんだけど
0600デフォルトの名無しさん
2015/02/20(金) 05:31:54.15ID:HhpNDOhk汎用コンテナ等で、型のわからないデータをなんかの拍子にoptionalに入れて取り出して
型が変わったら困るでしょ
0601デフォルトの名無しさん
2015/02/20(金) 14:31:15.59ID:WU53rPmt0602デフォルトの名無しさん
2015/02/20(金) 14:47:56.08ID:BQ0HPMBo0603デフォルトの名無しさん
2015/02/20(金) 15:21:17.11ID:3cwntlj60604デフォルトの名無しさん
2015/02/20(金) 17:36:00.88ID:/cS16MGZ0605デフォルトの名無しさん
2015/02/20(金) 17:39:13.27ID:5FOc2mPU1.2は当然無理だろうけど
0606デフォルトの名無しさん
2015/02/20(金) 17:50:15.98ID:c/BSOhvBジョブズと、あとはマイケル・ジャクソン
0607デフォルトの名無しさん
2015/02/20(金) 19:47:38.44ID:d89dlcycなんでそんなことが起きるのか意味わからない。
どういうこと?具体的に説明して、どうぞ
0608デフォルトの名無しさん
2015/02/21(土) 00:48:12.44ID:Z9EOPxZRまず、依存先のライブラリは作成するダイナミックフレームワークに含められますか?
それとも、ダイナミックフレームワークを使うアプリのプロジェクトで依存ライブラリもリンクしないといけないですか?
前者の場合、別のダイナミックフレームワークも同じC言語ライブラリを使っていたとして、
同じライブラリを使用した複数のダイナミックフレームワークを同じアプリでリンクしたらどうなりますか?
リンクエラーになりますか?正常にリンクできますか?どれかひとつの実装のみが使われますか?
0609デフォルトの名無しさん
2015/02/21(土) 01:17:03.48ID:PJ316OmS0610デフォルトの名無しさん
2015/02/21(土) 01:41:36.24ID:Z9EOPxZR静的ライブラリとしてビルドできるのかはわかりませんがbrewで入れたものは動的リンクライブラリ(.dylib)になってますね。
0611デフォルトの名無しさん
2015/02/21(土) 02:11:45.24ID:9dFVJ2j7C/C++やObj-cと同じく、フレームワークに含める/含めないは自分が決定することだろうし
リンクして関数名がバッティングすればエラーが出るだろうよ
dylibはうまいことやればその辺回避出来るフォーマットだった気がするが
考えるの面倒だから必要分だけリンクすればいいんじゃね?
0612デフォルトの名無しさん
2015/02/21(土) 02:19:57.94ID:Z9EOPxZRそうなんですか?すみません。
そのへんよくわかってないんですが、
フレームワーク作れるようになったのはSwiftができたからだった気がして。
Objective-C だとフレームワークは作れないですよね。
0613デフォルトの名無しさん
2015/02/21(土) 15:27:24.72ID:RqXv00zr0614デフォルトの名無しさん
2015/02/21(土) 17:23:32.83ID:PJ316OmSdylibしか気にしていなく、また、brewで入れたものしか気にしてないんだったら、Frameworkに取り込む必要は無いだろう
このライブラリが必要ですって書いておけばいいだけじゃね。使う対象も開発者なんだから
>>612
iOSに限っての話ならiOSはスタティックライブラリしか外部のライブラリは使えなく、当初はまんまスタティックライブラリを作るテンプレートしかなかった
スタティックライブラリでもFramework形態だとヘッダーも込みで取り込みにも便利でありそういう形態の外部Frameworkもあったが、作るのは自力でであった
Swiftと同時期のXcodeでFrameworkのテンプレートが入ったのでそれと混同してね?
まあ、dylibっつうてるからOS Xなんだろうけど、OS XではSwiftなんて出る前というか、OS X当初からフレームワークを作れるテンプレートは存在した。もちろん、Objective-Cで
0615デフォルトの名無しさん
2015/02/21(土) 17:41:04.17ID:PJ316OmS×>>611 (しつれ)
○>>610
0616デフォルトの名無しさん
2015/02/23(月) 12:50:32.49ID:J1xgPnrTフラットデザイン?てやつ難しすぎだろみんなどうやってんの
0617デフォルトの名無しさん
2015/02/23(月) 13:03:55.19ID:cFWATYQhAndroidのマテリアルより表現少ないから楽
0618デフォルトの名無しさん
2015/02/23(月) 14:57:38.62ID:Pox1yYhpなんだこのエラー。うけるわ
0619デフォルトの名無しさん
2015/02/23(月) 15:07:20.85ID:guoKYi3h0620デフォルトの名無しさん
2015/02/23(月) 22:23:35.44ID:4rKozWD+0621デフォルトの名無しさん
2015/02/24(火) 07:20:15.51ID:dmk3sM1Hユーザーが入力したSwiftスクリプトをアプリ上で実行したいんだけど
0622デフォルトの名無しさん
2015/02/24(火) 08:30:32.44ID:6nzxQRIRホントにこういう層が使い始めたんだなぁ
0623デフォルトの名無しさん
2015/02/24(火) 09:05:52.21ID:K/19wsS7>>621
REPLに渡せば?
0624デフォルトの名無しさん
2015/02/24(火) 11:51:49.89ID:Z7cy/5kT良いと思います
0625デフォルトの名無しさん
2015/02/24(火) 14:36:22.01ID:4AhK+XI60626デフォルトの名無しさん
2015/02/24(火) 14:42:35.58ID:YtPRSFe60627デフォルトの名無しさん
2015/02/24(火) 14:58:45.48ID:Os1aNO9O0628デフォルトの名無しさん
2015/02/24(火) 15:27:00.55ID:1px78jPcSwiftやってる人って新規参入者と遊び目的の経験者くらいだろ。
新参はもう後に引けないからかわいそうだよな。
0629デフォルトの名無しさん
2015/02/24(火) 20:28:32.73ID:xl3zgpOz0630デフォルトの名無しさん
2015/02/24(火) 20:45:51.59ID:trUfTvKQ0631デフォルトの名無しさん
2015/02/25(水) 15:14:38.34ID:9jFMW7lk0632デフォルトの名無しさん
2015/02/25(水) 15:19:14.92ID:c988Z4ZJお前が作るんじゃなかったのかよ
0633デフォルトの名無しさん
2015/02/25(水) 19:42:42.58ID:5/Q2jkzJだいたいドラッグアンドドロップでガワは組めるけど
なにをどうするかは中になんらかの形で書かなきゃならんしなぁ…
0634デフォルトの名無しさん
2015/02/25(水) 20:52:14.24ID:1F5pHynb0635デフォルトの名無しさん
2015/02/25(水) 21:11:03.45ID:MCz4NBVdそれより後ろのやつ全部にデフォルト引数ついてれば外部引数名いらないんじゃなかったっけ?
外部引数名必須になった?
0636デフォルトの名無しさん
2015/02/25(水) 21:49:34.06ID:zWtZ3bam言語仕様変更で変わってるから最新は知らんけど
0637デフォルトの名無しさん
2015/02/26(木) 00:06:46.75ID:ijHzY9u30638デフォルトの名無しさん
2015/02/26(木) 01:50:03.46ID:6BSnxXxoそれと、エラーメッセージも気になる。
もしかして「あなたはプログラマーに向いてません」とか?
0639デフォルトの名無しさん
2015/02/26(木) 07:47:35.86ID:f37zEvBK0640デフォルトの名無しさん
2015/02/26(木) 08:18:51.22ID:5WvXwXHs画面サイズ増やし過ぎなんだよくそっぷる
0641デフォルトの名無しさん
2015/02/26(木) 11:22:26.11ID:uuMNHo2u英語読めないからじゃなくて?
ツールにバグが多いとか?
0642デフォルトの名無しさん
2015/02/26(木) 11:39:29.87ID:5WvXwXHsボタンを均等に配置はできるけどボタンサイズを可変にしてスペースを固定するとかがどうしても成功しない
0643デフォルトの名無しさん
2015/02/26(木) 14:43:39.93ID:ZlyxtZ3O0644デフォルトの名無しさん
2015/02/26(木) 14:46:24.80ID:UlpLE7Cn数ヶ月後に触ろうとすると、まず訳分からんちんになるし
0645デフォルトの名無しさん
2015/02/26(木) 15:03:54.83ID:WfYDQrVsあぁ、これは Swift もそうだなw
0646デフォルトの名無しさん
2015/02/26(木) 20:21:38.37ID:XuDII8Li>if文21個以上連続するとエラーとか軟弱過ぎ
これ意味分かんないんだよね。
どんな変なパーザを書くとif文の連続する個数が問題になるのかが想像できない。
0647デフォルトの名無しさん
2015/02/26(木) 20:29:36.12ID:b79/fYAK良し悪しは置いてもこれくらいは想像してやれよ
0648デフォルトの名無しさん
2015/02/26(木) 20:34:15.01ID:XuDII8Li>ネスト毎にスタックテーブル持ってて無限にすると壊れるから上限20にしてる
>良し悪しは置いてもこれくらいは想像してやれよ
もういろいろおかしい。
0649デフォルトの名無しさん
2015/02/26(木) 20:39:39.28ID:435mN2Lv0650デフォルトの名無しさん
2015/02/26(木) 20:59:17.00ID:EyqmRpoRxibとStoryboard上でもコメントを入れられるといいのにね
0651デフォルトの名無しさん
2015/02/26(木) 21:10:54.59ID:jGNViKeY他も心配になって当然
0652デフォルトの名無しさん
2015/02/26(木) 21:11:00.25ID:jyXquw1nもっと言うとif文関係なく長い数式書くと死ぬ
0653デフォルトの名無しさん
2015/02/26(木) 21:15:59.81ID:XuDII8Li0654デフォルトの名無しさん
2015/02/26(木) 21:31:02.18ID:ijHzY9u3どういうコード書いたらどういうエラーが起きたのかちゃんと説明してほしい真面目に
0655デフォルトの名無しさん
2015/02/26(木) 22:21:24.21ID:fAsMn0/jそういうことも想像出来ないズブの素人もいるしなぁ
そういうことで Source Kit が落ちないようにガードしてるんだろ、残念ながら頻繁に落ちるけど
complex check toolsに捕まらない程度に書けば良い気がする
if 20個は警告ってレベルじゃねーからな
0656デフォルトの名無しさん
2015/02/26(木) 22:22:28.90ID:RBoyK9EVおそらく >>618 のエラーのことだろうね
コードに含まれる識別子のデータ型を明示的に宣言せず式や文で使用すると、
Swift コンパイラは与えられたスコープの範囲内で型推論を試みる
型推論というのはパズルの全解探索みたいなアルゴリズムを用いるから、
(とりわけ言語仕様が複雑な Swift では)式や文の複雑度が一定限度を越えると、
探索空間が爆発してエラーとなる可能性がある
そのエラーとなる上限が、たまたま「if 文を21個連ねる」だったのだろう
おそらくエラーとなったコードも、いくつかの識別子へ明示的なデータ型宣言を
加えるだけで、正常にコンパイルできるようになる .... と推測する
0657656
2015/02/26(木) 22:36:45.24ID:RBoyK9EVすでに何件か Stackoverflow 上で同様の問題が指摘されているみたいだね
・xcode - If condition failing with expression too complex - Stack Overflow
http://stackoverflow.com/questions/26550775/if-condition-failing-with-expression-too-complex
・compiler errors - Limit to number of terms in an expression? - Stack Overflow
http://stackoverflow.com/questions/25412198/limit-to-number-of-terms-in-an-expression
・Swift compound arithmetic operation ERROR - Stack Overflow
http://stackoverflow.com/questions/25569373/swift-compound-arithmetic-operation-error
どうやら、型推論とは無関係に単純な式を連ねるだけで再現するみたいだ
というわけで、>>656 のカキコを撤回するわ ...orz
0658デフォルトの名無しさん
2015/02/26(木) 22:55:44.07ID:435mN2Lv0659デフォルトの名無しさん
2015/02/26(木) 23:12:45.32ID:QRbSrjVvえ…これで落ちるんwwwwwwwww
ありえんだろ
0660デフォルトの名無しさん
2015/02/26(木) 23:38:54.33ID:jyXquw1n原因教えて欲しい
■ このスレッドは過去ログ倉庫に格納されています