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/
0035デフォルトの名無しさん
2014/08/05(火) 21:38:06.91ID:q3/M2RFT一度全部削除して入れ直せば大丈夫だろうが、Fix it したほうが早いね。
0036デフォルトの名無しさん
2014/08/06(水) 10:23:13.01ID:+oVXtDw00037デフォルトの名無しさん
2014/08/07(木) 11:01:38.76ID:so7ZCTBn0038デフォルトの名無しさん
2014/08/08(金) 07:56:57.30ID:0RLXnAM8関数ポインタだって扱える
Function Pointers
C function pointers are imported into Swift as CFunctionPointer<Type>, where Type is a Swift function type.
For example, a function pointer that has the type int (*)(void) in C is imported into Swift as CFunctionPointer<() -> Int32>.
0039デフォルトの名無しさん
2014/08/08(金) 14:04:26.83ID:t4nUvWhzfunc fn(a: Int) -> Int {
return a
}
fn(5) // => 5
fn(5.3) // => 5
let num = 5.3
fn(num) // Error: "Double" is not convertible to 'Int'
fn(Int(num)) // => 5
0040デフォルトの名無しさん
2014/08/08(金) 14:14:09.50ID:FHu5gdbl0041デフォルトの名無しさん
2014/08/08(金) 14:22:23.37ID:0RLXnAM80042デフォルトの名無しさん
2014/08/08(金) 14:34:06.27ID:eIB6EleCとか、どこがセーフティなんだって感じだな
0043デフォルトの名無しさん
2014/08/08(金) 14:44:54.31ID:OLXn5oNKバグではないでしょ
型変換しているつもりが無いっていうか、型変換などしていない。
>>40の言うとおり、リテラルだからコンパイル時に型が決定しているだけ。
fnの引数の型がIntだから最初からInt型になるだけ。
5.3だからDoubleになってIntに型変換されているんじゃない。最初からInt。
これは関数の引数だけじゃなくて代入でも同じ。
let num : Int = 5.3
と書いてもエラーにならない。Double型の5.3がIntに型変換されて代入されるのではなくて、最初からInt。
0044デフォルトの名無しさん
2014/08/08(金) 14:51:28.10ID:0RLXnAM80045デフォルトの名無しさん
2014/08/08(金) 14:57:27.75ID:eIB6EleCprintln("\(1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)")
がちゃんと動かないんだけど、\()の中って長過ぎるとダメとかあるんだっけ?
0046デフォルトの名無しさん
2014/08/08(金) 15:00:48.88ID:t4nUvWhz5 >= 5.3 // true
とかどう考えても嬉しくないんだけど
0047デフォルトの名無しさん
2014/08/08(金) 16:49:34.13ID:eIB6EleCprintln("hogehoge".length)
って書けるのに、
let str = "hogehoge"
println(str.length)
って書けないのはなんで?
0048デフォルトの名無しさん
2014/08/08(金) 16:58:51.21ID:NYRFXe490049デフォルトの名無しさん
2014/08/08(金) 17:06:32.25ID:eIB6EleC0050デフォルトの名無しさん
2014/08/09(土) 17:04:50.89ID:N+zBGm2pいろんな書き方があるので迷いまする
var d: Dictionary<String, Int> = [:]
var d: [String: Int] = [:]
var d = [String: Int]()
var d = Dictionary<String, Int>()
0051デフォルトの名無しさん
2014/08/09(土) 17:33:00.24ID:3ND9e6Slしっくりくる
0052デフォルトの名無しさん
2014/08/09(土) 17:57:04.42ID:7nARyUM7var d = [String: Int]()
> You can also write the type of a dictionary in shorthand form as [KeyType: ValueType].
> Although the two forms are functionally identical, the shorthand form is preferred,
> and is used throughout this guide when referring to the type of a dictionary.
0053デフォルトの名無しさん
2014/08/09(土) 18:21:33.99ID:N+zBGm2pありがとございました
アップル推奨の奴でいきまする
0054デフォルトの名無しさん
2014/08/09(土) 22:19:51.31ID:TSdBD6Gl0055デフォルトの名無しさん
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:0B3vcACg■ このスレッドは過去ログ倉庫に格納されています