Swift part3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/07/23(水) 11:46:48.42ID:x29J8vdYApple Developer
https://developer.apple.com/swift/
Welcome to Swift
https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/LandingPage/
iBooks: The Swift Programming Language
https://itunes.apple.com/jp/book/swift-programming-language/id881256329?mt=11
書籍の形にはなってないけどドキュメント
The Swift Programming Language
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097
Using Swift with Cocoa and Objective-C
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097
Swift Standard Library Reference
https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/SwiftStandardLibraryReference/
Swift Blog
https://developer.apple.com/swift/blog/
Resources (Xcode 6が無料でダウンロードできる)
https://developer.apple.com/swift/resources/
関連スレ
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://peace.2ch.net/test/read.cgi/tech/1401736341/
Swift part2
http://peace.2ch.net/test/read.cgi/tech/1402465335/
0055デフォルトの名無しさん
2014/08/09(土) 22:31:53.48ID:3ND9e6SlC++みたいで、見慣れてるって思った
0056デフォルトの名無しさん
2014/08/10(日) 00:24:39.30ID:y9erLln4教祖様おすすめの新記法を使うべきだろ
0057デフォルトの名無しさん
2014/08/10(日) 00:44:53.30ID:9qr6A6n9自分がいちばん良いと思う(あるいは、コーディング規約で定められた)記法を使うだけだ。
自分で書くとしたらvar d = [ String : Int ]()かな。
0058デフォルトの名無しさん
2014/08/10(日) 03:53:48.49ID:9xNLSGsY0059デフォルトの名無しさん
2014/08/10(日) 22:20:58.90ID:ooL2SMwQ0060デフォルトの名無しさん
2014/08/10(日) 22:29:20.21ID:JTN9tFDtの方が好きだけど
var d = ["salary": 300000]
のように空で無いときと統一するなら(右辺で型推論するなら)、>>57と同じだなあ
悩ましい
0061デフォルトの名無しさん
2014/08/11(月) 04:24:18.04ID:cC/8Gjcjvar d: [String: Int] = [:]
が推奨されてないわけではない
0062デフォルトの名無しさん
2014/08/11(月) 11:14:02.48ID:HXiuyVVbvar namesOfIntegers = [Int: String]()
でイニシャライズして
namesOfIntegers[16] = "sixteen"
と値を入れても
namesOfIntegers = [:]
で再初期化出来る と言う流れ
0063デフォルトの名無しさん
2014/08/13(水) 16:59:09.89ID:xwn08+4Rなるほど
0064デフォルトの名無しさん
2014/08/15(金) 12:28:19.59ID:HBtdHn8g"a".hashValue // 4799450059485595655
"b".hashValue // 4799450059485595656
連続しすぎで簡単に衝突しそう
0065デフォルトの名無しさん
2014/08/15(金) 13:09:55.51ID:W4XUmOz/0066デフォルトの名無しさん
2014/08/15(金) 13:35:15.80ID:HBtdHn8gあと予測しやすいのでDoS攻撃もしやすい
0067デフォルトの名無しさん
2014/08/15(金) 13:44:09.62ID:HBtdHn8gvar age: Int
var name: String
var hashValue: Int { return age.hashValue ^ name.hashValue }
}
func ==(l: Person, r: Person) -> Bool { return l.age == r.age && l.name == r.name }
// ↓全部同じ
Person(age: 20, name: "a").hashValue
Person(age: 27, name: "b").hashValue
Person(age: 30, name: "c").hashValue
0068デフォルトの名無しさん
2014/08/15(金) 14:03:31.32ID:ctFtgwKNそのハッシュは暗号化の意味は持ってなくてぶつからないように散らすという意味しかないよ。
攻撃されるような、つまりハッシュを外部に見せる場所では使うべきじゃない。
0069デフォルトの名無しさん
2014/08/15(金) 14:37:01.87ID:IEcKMmnc整数なら整数値がそのままハッシュ値になるのは、JavaもSwiftも同じ
ただ、ハッシュの計算法については明文化してほしいよなあ。これはObj-Cの時からだけど
0070デフォルトの名無しさん
2014/08/15(金) 14:47:41.59ID:W4XUmOz/なんで XORとるの?
var hashValue: Int { return (String(age) + ":" + name).hashValue }
とかじゃダメなの?
0071デフォルトの名無しさん
2014/08/15(金) 14:53:58.04ID:HBtdHn8gお騒がせ
0072デフォルトの名無しさん
2014/08/15(金) 14:59:37.87ID:Lne+Px+X靖国、
逝こう。
0073デフォルトの名無しさん
2014/08/15(金) 15:17:20.80ID:IEcKMmncそれだとハッシュ値計算が重くなるよ。
単純な数値計算が望ましいから、Javaみたいにするのが無難
0074デフォルトの名無しさん
2014/08/15(金) 15:21:15.99ID:IEcKMmncいやだから、StringのhashValue変えることに意味無いんだって。
この場合、XORでなく、他の方法でハッシュ値求めればいいだけだよ
0075デフォルトの名無しさん
2014/08/15(金) 15:35:30.99ID:ZaXPBhtEそれをインスタンスを作るたびに計算をさせていたらクソ遅いとかw
0076デフォルトの名無しさん
2014/08/15(金) 15:47:01.00ID:HBtdHn8gもうSipHash 2-4で実装しなおした
0077デフォルトの名無しさん
2014/08/15(金) 16:14:55.16ID:IEcKMmncなどほどHashDoSか
でもSwiftってiOS/OSX向けだからDoS攻撃されることなくね?
あと、スクリプト言語はともかく、Obj-C並みの速度で動作するSwiftへのパフォーマンスの影響はいかほどなんだろう。
0078デフォルトの名無しさん
2014/08/16(土) 00:47:57.07ID:XlNU51V90079デフォルトの名無しさん
2014/08/16(土) 08:42:21.65ID:DXpV4TuM0080デフォルトの名無しさん
2014/08/17(日) 11:21:02.10ID:NRGjpcdUvar d = ["a": 10, "b": "BBB"]
d["C"] = "123"
ちなみに、こっちはOKでした。
var d:[String: Any]= ["a": 10, "b": "BBB"]
d["C"] = "123"
0081デフォルトの名無しさん
2014/08/17(日) 13:19:14.20ID:V8SXHhEtstruct S {
var a: Int = 0 {
didSet {
println("a did set: ¥(a)")
b = a + 1
}
}
var b: Int = 0 {
didSet {
println("b did set: ¥(b)")
a = b + 1
}
}
}
var s = S(a: 0, b: 0)
s.a = 1
a did set: 1
b did set: 2
a did set: 3
b did set: 4
a did set: 5
b did set: 6
a did set: 7
…
0082デフォルトの名無しさん
2014/08/17(日) 13:26:01.14ID:V8SXHhEt上は Foundation.NSDictionary になるからダメ
下は Swift.Dictionary<String, Any> だからおk
ちな
var d = ["a": 10, "b": "BBB"].mutableCopy()
d.setObject("123", forKey: "C")
println(d.description)
{
C = 123;
a = 10;
b = BBB;
}
NSMutableDictionaryにしてもSwiftのsubscript持ってないから使いにくいね
0083デフォルトの名無しさん
2014/08/17(日) 13:29:48.59ID:V8SXHhEtNSMutableDictionary でも subscript 使えたわw
var d = ["a": 1, "b": "2"].mutableCopy() as NSMutableDictionary
d["c"] = 9
println(d)
0084デフォルトの名無しさん
2014/08/17(日) 13:31:26.48ID:V8SXHhEtvar d = ["a": 1, "b": "2"] as NSMutableDictionary
d["c"] = 9
println(d)
連レススマソ
0085デフォルトの名無しさん
2014/08/17(日) 13:37:39.60ID:Oy9xGDlU型変換のサンプルとしてなら解るが
0086デフォルトの名無しさん
2014/08/17(日) 14:03:51.32ID:K7CnHZGx問題は、リテラルで暗黙的にSwift.Dictionary を 作ろうとした時に、typoでFoundation.NSDictionary に なってしまい、さらにその行ではエラーにならない可能性がある、という点だと思います
0087デフォルトの名無しさん
2014/08/17(日) 14:31:33.29ID:6prtFSikTypo も多いだろうし
0088デフォルトの名無しさん
2014/08/17(日) 14:34:39.04ID:NRGjpcdUレス感謝
リテラルだとNSDictionaryになる場合があるんですね
なんか分かりにくいですね。もうちょっとわかりやすい規則性だといいんですが...
0089デフォルトの名無しさん
2014/08/17(日) 14:51:16.87ID:LfZg7/6zvalueをAnyObjectにするとDictionaryになる。
おそらく、Obj-Cとの互換性のためじゃないかと思う。(NSDictionaryのvalueはAny扱いだろうから)
StackOverflowでも同じ話題が出てる
http://stackoverflow.com/questions/24023622/swift-dictionary-bug
0090デフォルトの名無しさん
2014/08/17(日) 14:53:42.48ID:LfZg7/6z0091デフォルトの名無しさん
2014/08/17(日) 15:03:23.86ID:LfZg7/6z連レス失礼
0092デフォルトの名無しさん
2014/08/17(日) 15:47:24.27ID:V8SXHhEtAnyやAnyObjectは祖先クラスじゃないから、[1, "a"]ってしたときに共通の祖先クラスがなくてSwiftの世界じゃ型を決められない
共通の祖先クラスがあればちゃんと型推論働く
class Sup {}
class SubA : Sup {}
class SubB : Sup {}
class SubC : Sup {}
var arr = [SubA(), SubB()] // <-ちゃんと[Sup]型になる
arr.append(SubC()) // [Sup]型だからSubCも突っ込める
0093デフォルトの名無しさん
2014/08/17(日) 21:19:17.58ID:QzjnpziEvar i = 10
for i in 1...5 {
println(i)
}
println(i)
0094デフォルトの名無しさん
2014/08/17(日) 23:11:23.64ID:n698S0JW0095デフォルトの名無しさん
2014/08/17(日) 23:23:32.70ID:GikCLa8j無理があるな
0096デフォルトの名無しさん
2014/08/17(日) 23:28:28.38ID:Dhvcldox警告がないことがクソな理由がわからん
0097デフォルトの名無しさん
2014/08/17(日) 23:33:37.07ID:LfZg7/6z何か問題あるのか?
for文の中でだけiはカウントされているのに?
0098デフォルトの名無しさん
2014/08/17(日) 23:34:59.76ID:QzjnpziEvar i = 10
for i=0; i<=5; i++ {
println(i)
}
println(i)
0099デフォルトの名無しさん
2014/08/17(日) 23:36:24.94ID:LfZg7/6zvar i = 10
for var i=0; i<=5; i++ {
println(i)
}
println(i)
0100デフォルトの名無しさん
2014/08/17(日) 23:41:12.49ID:tBLxxj+B0101デフォルトの名無しさん
2014/08/17(日) 23:43:25.37ID:LfZg7/6z>>99は新たに変数を定義している。for-inも同じ
って違い
0102デフォルトの名無しさん
2014/08/17(日) 23:50:58.64ID:QzjnpziE0103デフォルトの名無しさん
2014/08/18(月) 00:11:33.88ID:En9s5gLv○糞理解力すぎて恥ずかしくなったからもう寝るわ
0104デフォルトの名無しさん
2014/08/18(月) 02:59:27.51ID:O5wid4ZY0105デフォルトの名無しさん
2014/08/18(月) 09:45:40.90ID:AEgSkInFいろいろと粗が目立つ
開発者からのフィードバックも膨大に溜まってんだろ
こなれてくるまでには2,3年はかかるか
0106デフォルトの名無しさん
2014/08/18(月) 14:58:59.79ID:AbutQB81ライブラリの整備は多少時間がかかるかもしれないが
0107デフォルトの名無しさん
2014/08/18(月) 15:16:48.80ID:+QBXrcY+これcも同じだけど。スコープとか知らんの?
0108デフォルトの名無しさん
2014/08/18(月) 15:18:22.93ID:kU0z26/tつうかどうしてアホー言語っていちいち字面をキモくしなきゃ気がすまないんだ
0109デフォルトの名無しさん
2014/08/18(月) 15:26:28.48ID:r8tHn57o0110デフォルトの名無しさん
2014/08/18(月) 15:44:54.29ID:7O3aXnPzいわばTPOっていう?w
0111デフォルトの名無しさん
2014/08/18(月) 15:50:06.54ID:AbutQB81それが嫌ならこんなのどうだ?好きなの使え
for i in 0...5 {}
0112デフォルトの名無しさん
2014/08/18(月) 15:52:47.66ID:r8tHn57oってそういやbeta5が出てたな
0113デフォルトの名無しさん
2014/08/18(月) 15:53:32.18ID:IXyCPeCcfor i=0; i<=5; i++ {
println(i)
}
println(i)
これを for in を使って書くとしたら...
0114デフォルトの名無しさん
2014/08/18(月) 16:16:23.42ID:DYjOgIx2swiftにコミットするのやめてくれんかのう
0115デフォルトの名無しさん
2014/08/18(月) 16:21:49.19ID:AbutQB81a <= b の範囲は a ... b のまま
0116デフォルトの名無しさん
2014/08/18(月) 16:43:01.98ID:nVnuxrx8Cのfor文の丸括弧を取っ払っただけだし,C++,C#,Javascriptでも同種の構文があるんだが。
何にも知らないんだね。
0117デフォルトの名無しさん
2014/08/18(月) 16:46:35.71ID:r8tHn57ofor文で <= 使うのはかなり特殊なケースだから勘違いしちゃったよ
まあこう書くと反論する人いるだろうからこのへんでー
0118デフォルトの名無しさん
2014/08/18(月) 21:16:14.69ID:jy6904iqぎゃくに、ちょこまか変えてるのが今はウザい
しかも、つけてもコンパイルとおるって言う
じゃあ何でとったっていう
0119デフォルトの名無しさん
2014/08/18(月) 21:19:53.54ID:WWtz0eQIしばらくSwift書いてObjCに戻ったらセミコロンがもの凄くかったるく感じる
0120デフォルトの名無しさん
2014/08/18(月) 21:42:59.44ID:En9s5gLvaaa(); bbb()
こんな風に一行で書くには;がいるわけ
今は省けるもんは省くのがトレンドだからね(型推論にしても)
でも、Swiftは無闇に省いているわけではない。
例えば、ifなどの制御構文のブロックとか、return句とかは必須だ。
0121デフォルトの名無しさん
2014/08/18(月) 21:43:56.75ID:jy6904iqそうだ、それがうぜー
全部つければ何も考えなくていいのに
0122デフォルトの名無しさん
2014/08/18(月) 21:47:40.83ID:En9s5gLvそのうち慣れて何も考えなくても書けるようになるよ。
0123デフォルトの名無しさん
2014/08/18(月) 21:50:27.90ID:jy6904iqところで、if文ブロックとreturnにセミコロンが必要ってのはどこに書いてあったっけ?
0124デフォルトの名無しさん
2014/08/18(月) 21:53:11.65ID:jy6904iq今リファレンス読んでみたけど、>>120の1行目だけ正しいね
0125デフォルトの名無しさん
2014/08/18(月) 21:56:58.04ID:jy6904iq一行にまとめて書く場合以外は
0126デフォルトの名無しさん
2014/08/18(月) 22:01:50.19ID:En9s5gLvちゃうちゃう、制御文にブロックが必要ってこと
Swiftでは以下のようには書けない
//-------
if (a.hasPrefix("s"))
doSomething()
// これはOK
if (a.hasPrefix("s")) { doSomething() }
//-------
あと、Rubyみたいにどこでもreturnが省けるわけではないということ
//------
func empty() -> String { return "" } // return必須
class SomeClass {
var aaa:String { return "AAA" } // return 必須
}
let f:()->String = { "aaa" } // クロージャは式のみの場合returnを省ける
let f2:()->String = { var a = "aaa"; return a } // こっちはreturn必須
//------
セミコロンにしても、締めるところは締めていると言うことを言いたかったんや。
0127デフォルトの名無しさん
2014/08/18(月) 22:16:02.11ID:jy6904iqなるほど、そういうことか
全部セミコロンの話かと思ってた
どうもありがとう
にしても、
if (a.hasPrefix("s"))
doSomething()
はやりそうだなぁ
Cでも、単文でも極力{ }でくくるようにはしてるけど
0128デフォルトの名無しさん
2014/08/18(月) 22:33:45.06ID:WWtz0eQI0129デフォルトの名無しさん
2014/08/18(月) 23:24:23.43ID:TotxymUgあれ、一目見ておかしいと思わないの? { } でくくっても同じだろ
0130デフォルトの名無しさん
2014/08/19(火) 00:02:18.38ID:dGN2Xh51あんな重要なとこまともにテストしてないのがおかしい
0131デフォルトの名無しさん
2014/08/19(火) 13:57:12.16ID:c6AsXCDxhttp://news.livedoor.com/article/detail/9157615/
「2014年前半のインパクトはもう圧倒的にSwiftの登場。これは間違いなく普及する」と小飼氏が断言する理由は、次の5つに集約されるそうだ。
【1】既存環境の言語との高い互換性
【2】他の言語の“負の遺産”を捨てている
【3】優れたリファレンス
【4】iOSエンジニアをアセンブラ領域まで進出させる可能性
【5】クローズドから始めてオープンへというAppleの戦略意図を感じる
0132デフォルトの名無しさん
2014/08/19(火) 14:08:21.75ID:sBhGF3j60133デフォルトの名無しさん
2014/08/19(火) 14:28:29.94ID:c6AsXCDx0134デフォルトの名無しさん
2014/08/19(火) 15:16:25.26ID:0B3vcACg0135デフォルトの名無しさん
2014/08/19(火) 15:25:47.81ID:sBhGF3j60136デフォルトの名無しさん
2014/08/19(火) 15:38:00.06ID:0B3vcACg俺の書くコードの質と、dankogaiが書くコードには何の関係もないよ。
以前
http://blog.livedoor.jp/dankogai/archives/51767934.html
で偉そうなこと書いてその後こてんぱんにやられてたが、少なくとも404 Blog Not Foundに書かれるコードは糞コードだらけだ。
0137デフォルトの名無しさん
2014/08/19(火) 15:57:36.88ID:sBhGF3j6どこがどういう理由で糞なのか参考までに教えて頂けると助かります。
0138デフォルトの名無しさん
2014/08/19(火) 16:00:56.56ID:muSpSvbP下までスクロールするとブラウザがフリーズした
0139デフォルトの名無しさん
2014/08/19(火) 16:13:13.66ID:lLkg1CgN404で見たこと無い。 Swift のコードはほとんどQiitaだろ
最近Swiftばかり
0140デフォルトの名無しさん
2014/08/19(火) 16:19:24.69ID:lLkg1CgN0141デフォルトの名無しさん
2014/08/19(火) 16:24:34.18ID:0B3vcACg何年前って2012年の記事だろ。
> Swift のコードはほとんどQiitaだろ
あ、そうなの?dankogaiのまともなコードがあるならリンクよろしく。まあないと思うけどな。
0142デフォルトの名無しさん
2014/08/19(火) 16:27:25.14ID:sBhGF3j60143デフォルトの名無しさん
2014/08/19(火) 16:33:02.29ID:0B3vcACgなんかPerlの貢献度が高かったらしいのは知ってるが。
0144デフォルトの名無しさん
2014/08/19(火) 16:39:53.20ID:sBhGF3j6ゲームは作ってないけど
0145デフォルトの名無しさん
2014/08/19(火) 16:58:08.56ID:lLkg1CgNSwiftが出たのは6月だぞ
Qiitaも見たこと無いでコードの話をするなんて変なの 最も纏まったコードは無いけど
リンクも何もQiita Swift dankogai で検索すれば沢山出てくるから自分で見ろよ
0146デフォルトの名無しさん
2014/08/19(火) 19:08:01.93ID:b1cKAETJ場合によりけり。こと言語関連に限っては2年はそう昔の話ではないだろう
単に流行だけを追いかけてるだけなら 2年も前の話なんてカビが生えて かもしれないがな
0147デフォルトの名無しさん
2014/08/19(火) 19:09:17.26ID:TLaA01XG0148デフォルトの名無しさん
2014/08/19(火) 20:08:11.95ID:V8/7iNdrPatch pleaseでいいんじゃね。
swiftスレらしくswiftのコードに粘着してくれ。
0149デフォルトの名無しさん
2014/08/19(火) 21:19:55.30ID:c6AsXCDx6月以降だけを見ても404の方は数本、Qiitaの方はSwiftだけでも沢山書き込んでる
404は四方山話、コードならQiita
そんな404の古い四方山話を持ち出しても意味無いだろ Perlがもはや坂を転げ落ちてることは本人が良く知ってるだろう
SwiftでJSONとか参考になったよ
コードに文句つけるならSwiftのコードについて意見しろよ
0150デフォルトの名無しさん
2014/08/19(火) 21:49:44.49ID:aN7BQ+Qxhttp://qiita.com/dankogai/items/2d19b8352183cca3461f
var st = stat() // *1
let err = path.withCString { // *2
lstat($0, &st) // *3
}
わざわざ withCString 使うことない
C の const char* には String そのまま渡せる
var st = stat()
let err = lstat(path, &st)
0151デフォルトの名無しさん
2014/08/19(火) 21:56:15.35ID:FQGd2orm小飼弾ばっかり注目されて悔しいニダ
実名で有益なことやってる奴見ると腹立つニダ
0152デフォルトの名無しさん
2014/08/19(火) 22:09:32.82ID:b1cKAETJ0153デフォルトの名無しさん
2014/08/19(火) 22:20:56.13ID:dii/unFmまた色々言語仕様変更したらしいじゃねーか
0154デフォルトの名無しさん
2014/08/19(火) 22:25:06.20ID:RLzZhY/k今回はあんま変更ないじゃん。細かい改良がメインだし
Xcodeでリンクが上手く行かないって問題がなんぼか出ているようだが
■ このスレッドは過去ログ倉庫に格納されています