トップページ⇒tech
1001コメント338KB

Swift part2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2014/06/11(水) 14:42:15.02ID:+13mKJ0Z
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう

Apple 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
今のところbeta版のXcode 6がSwift対応らしい
https://developer.apple.com/xcode/downloads/

関連スレ
TypeScript(MS) VS Swift(Apple)
http://peace.2ch.net/test/read.cgi/tech/1401758403/

前スレ
Swiftスレ
http://peace.2ch.net/test/read.cgi/tech/1401736341/
0545デフォルトの名無しさん2014/07/08(火) 15:29:02.88ID:bNgjlK07
>>527
>>>525 別に日本人が翻訳で仮想と訳したから世界中でコンピュータ用語としての意味が変わったわけじゃないぞ。
>コンピュータ用語としてのVirtualは日本語には関係なくコンピュータ用語としての意味が有る。

はぁ? んなの当たり前じゃん。誰が意味が変わったとか書いているんだよ。
チンカス野郎はあまりに恥ずかしくてもう引っ込みがつかなくなったのかw
間違えたのなら素直に「ごめんなさい」ができるようにしなきゃダメだろ。

そっちの意味合いの場合に「仮想」という訳語が合ってるかどうかが問題なわけで。
「仮想」が他の訳語に比べて良い、という主張ならまだ意味が分かるが(というか、それを
言わなきゃダメだと思うが)、それすらできてないんだから頭の悪さに恐れ入るw
0546デフォルトの名無しさん2014/07/08(火) 16:21:53.93ID:ntuzzAHh
>>544
今のところKVOは無いって海外サイトで見た記憶がある。Property Observersあれはちょっと違うもんな。
0547デフォルトの名無しさん2014/07/08(火) 16:41:01.92ID:1LGDIph+
言語的に進化どころか、退化しとるやん
0548デフォルトの名無しさん2014/07/08(火) 16:45:57.06ID:MN/bBwl/
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-XID_10

Key-Value Observing
Information forthcoming.

後回しにしてるだけで、そのうち来るでしょ
0549デフォルトの名無しさん2014/07/08(火) 17:17:18.57ID:KMzZlwYF
↓こういう、すべてが式ってのが好きなんだが、入れてくれないかな

let price =
if item == "salad" {
3.50
} else if item == "muffin" {
2.25
} else {
2.00
};
0550デフォルトの名無しさん2014/07/08(火) 17:32:40.42ID:MN/bBwl/
>>549
let a = b = 10
これもわざわざ出来ないようにしてるぐらいだからあり得ん
0551デフォルトの名無しさん2014/07/08(火) 17:51:57.63ID:msYhinmO
>>549 三項演算子は?
0552デフォルトの名無しさん2014/07/08(火) 17:59:51.57ID:Cz3pNHi/
lisperだろ……
0553デフォルトの名無しさん2014/07/08(火) 18:26:31.51ID:blb+s9uO
クロージャを使えば全てが式になります
0554デフォルトの名無しさん2014/07/08(火) 18:44:32.63ID:msYhinmO
let price = ( item == "salad" ? 3.50 :
item == "muffin" ? 2.25 : 2.00 )
0555デフォルトの名無しさん2014/07/08(火) 19:03:58.20ID:3g0pjX2F
>>549
MacRuby はいかが?

price = if item == "salad"
      3.50
    elsif item == "muffin"
      2.25
    else
      2.00
    end

あるいは:

price = case item
    when "salad"
      3.50
    when "muffin"
      2.25
    else
      2.00
    end
0556デフォルトの名無しさん2014/07/08(火) 19:31:20.63ID:blb+s9uO
>>549
ifが式だと便利なのはもうちょっと複雑な場合でしょう
let price =
if item == "salad" {
let salad_price = get_salad_price()
if salad_price == nil {
3.50
} else {
salad_price
}
} else {
2.00
};
とかね
0557デフォルトの名無しさん2014/07/08(火) 19:44:48.34ID:ntuzzAHh
>>548
ていうか、Objective-Cブリッジで書けば今でもKVO自体は使えるのか
Swiftだけでできないってだけで
0558デフォルトの名無しさん2014/07/08(火) 19:50:01.29ID:msYhinmO
>>549 この場合三項演算子より、Dictionaryの方がスマートだな。

let food = [ "salad": 3.50 , "muffin": 2.25 , "other": 2.00]
var item = "muffin"
let price = food[ item ] //2.25
0559デフォルトの名無しさん2014/07/08(火) 19:59:23.60ID:TApsHvSZ
ただの一例を必死に書きなおしてもしょうがない
0560デフォルトの名無しさん2014/07/08(火) 20:04:53.25ID:P6whpC+s
取るに足りないことに拘って一貫性を壊す奴が一番迷惑なんだよな
0561デフォルトの名無しさん2014/07/08(火) 20:54:53.70ID:SGOgDbT/
これはOK
let x = [1,2,3].map({ String($0) })
let x:[String] = [1,2,3].map({ return String($0) })

↓これだと型推論きかない
let x = [1,2,3].map({ return String($0) })

なんで?
0562デフォルトの名無しさん2014/07/08(火) 21:15:48.89ID:SaRg/vLy
お馬鹿だから
0563デフォルトの名無しさん2014/07/08(火) 21:30:09.40ID:MN/bBwl/
単にまだコンパイラの型推論が不完全なだけだと思う
0564デフォルトの名無しさん2014/07/08(火) 22:03:30.65ID:SaRg/vLy
return文から推論する能力がないんだな。少なくともいまのところ
0565デフォルトの名無しさん2014/07/08(火) 22:10:20.61ID:1LGDIph+
しかし、ベータも3になったのにPlaygroundは未だにちょっとしたことで落ちるな
まともにテストしてねーのか
0566デフォルトの名無しさん2014/07/08(火) 22:23:56.49ID:1ZFygV1q
クロージャ作るとすぐ落ちるね
0567デフォルトの名無しさん2014/07/08(火) 22:26:57.36ID:ay/TmEch
>>565
テストが完了したベータって何?
0568デフォルトの名無しさん2014/07/08(火) 22:29:21.33ID:1LGDIph+
>>567 読解力無い人?
0569デフォルトの名無しさん2014/07/08(火) 22:34:39.03ID:ntuzzAHh
>>565
Yosemiteで動かすと大丈夫、、とかね。知らんけど。
0570デフォルトの名無しさん2014/07/08(火) 22:46:52.41ID:k+B2+0uE
>>568
だからそのテストを今あんたらにやらせてるんでしょ?
そんなこともわかってないやつがデベロッパやってることに驚くわ
文句あんならベータなんか使うなよタコ
0571デフォルトの名無しさん2014/07/08(火) 22:55:47.84ID:1LGDIph+
あらら怒っちゃった...
ベータ1から存在してる誰でもすぐに気づきそうなバグなので愚痴のひとつもいいたくなるだろ
0572デフォルトの名無しさん2014/07/08(火) 22:59:27.52ID:hjz6cmzU
開発あまりしてないようだからわからないようだね
ベータなんだからあなたのすることは愚痴ることでなくて、報告すること
開発続けていればそのうちわかるよ
0573デフォルトの名無しさん2014/07/08(火) 23:00:38.34ID:IDQCR4dM
Swiftの仕様すら固まっとらん段階なんだから黙ってバグレポート出して正座して待っとけよ
0574デフォルトの名無しさん2014/07/08(火) 23:06:19.28ID:1LGDIph+
2ちゃんで愚痴ってこんなに絡まれるとは思わんかったわ
しかもID違う人からw
0575デフォルトの名無しさん2014/07/08(火) 23:12:13.29ID:vanWZNwy
>>574
愚痴るのはいいけど、ベータ版ってこんなもんだよ。
プログラミング言語って10年以上掛けて成熟していくもんだけど、Swiftはもっと短い時間で成熟させようとしてるしね。
0576デフォルトの名無しさん2014/07/08(火) 23:12:18.25ID:i4Jr+ODi
ちょっと様々な言語に詳しい人にお聞きしたいんですが、Swiftの言語としての独自仕様ってどういうのがあります? 
OptionalValueはSwiftオリジナルなのかなーとか思ってるんですが。
0577デフォルトの名無しさん2014/07/08(火) 23:13:10.92ID:IDQCR4dM
>>574
自分から絡みついてんじゃん
0578デフォルトの名無しさん2014/07/08(火) 23:20:06.73ID:1LGDIph+
面白いからちょっとテストw

>>567 バーカ
>>570 氏ね
>>572 必死だなw
0579デフォルトの名無しさん2014/07/08(火) 23:20:49.20ID:vanWZNwy
>>576
optionalは普通に他言語にあるでしょ。Scalaとか
Javaでさえ(ライブラリレベルだけど)サポートしてるしねぇ
0580デフォルトの名無しさん2014/07/08(火) 23:26:06.92ID:hjz6cmzU
>>578
なんか余裕ぶっているのが哀れw明らかにそうじゃなさげなのが見え透いているだけに
いままでの言動から浅さがわかるんだけど、本人にはわからないんだろうなというのは、わかっていたらその浅はかさは出ないだろうからな
というテストに対する反応はどう?
0581デフォルトの名無しさん2014/07/08(火) 23:28:29.13ID:vanWZNwy
でも、SwiftのOptionalsはわかりやすくていいよね。
Rubyの述語のメソッド末尾に?付けたりするセンスと同じでいい感じ。
0582デフォルトの名無しさん2014/07/08(火) 23:29:01.66ID:1LGDIph+
あれw もしかして3回線持ち?
0583デフォルトの名無しさん2014/07/08(火) 23:29:52.59ID:1ZFygV1q
>>581
末尾に?を付けるのはC#のNullable Typesをパクっただけ
0584デフォルトの名無しさん2014/07/08(火) 23:32:41.22ID:vanWZNwy
>>583
知ってる。でもあれはOptionalsとは意味合いが違うじゃん?
0585デフォルトの名無しさん2014/07/08(火) 23:36:04.29ID:hjz6cmzU
>>582
ぼくに反するヤツなんてそういるわけなーいって?
いや、違うよ。俺はID:hjz6cmzUだけだよ。可哀想に、なお哀れ
もうよしたほうがいいよw
0586デフォルトの名無しさん2014/07/08(火) 23:40:14.82ID:1LGDIph+
あれ? ちょっと文体変わった?
0587デフォルトの名無しさん2014/07/08(火) 23:41:21.19ID:hjz6cmzU
可哀想に…
0588デフォルトの名無しさん2014/07/08(火) 23:43:13.81ID:1LGDIph+
しかし、一匹しか釣れなかったな…
0589デフォルトの名無しさん2014/07/08(火) 23:43:26.78ID:IDQCR4dM
自意識過剰っつうか自己愛強過ぎっつうか
0590デフォルトの名無しさん2014/07/08(火) 23:49:43.10ID:hjz6cmzU
ただの底が浅いヤツでしかなったけどなあ。終始一貫してw
0591デフォルトの名無しさん2014/07/08(火) 23:50:52.87ID:3Wa9eLVl
>>584
lisp由来
0592デフォルトの名無しさん2014/07/08(火) 23:51:46.48ID:1LGDIph+
飽きたな
そろそろ寝るか
0593デフォルトの名無しさん2014/07/09(水) 00:42:32.08ID:lknlO7J2
>>576
Swift の Optional の概念は、
ML や Haskell といった静的型付けな関数型言語では一般的なもの
たとえば ML族(SML/OCaml/F#) では Option 型と呼ばれ、
NONE または SOME x という値を持つ
Haskell や Scala では Maybe 型と呼ばれ、
Nothing または Just x という値を持つ

ただし、この Optional という概念は Java や C# のような非関数型言語でも
実装できるけど、それをAppleが(関数型言語ではない) Swift における
言語仕様の一部として公式に取り入れたことは、特筆すべきことだ

あと Apple 固有の事情ではあるけれど、動的型付けと静的型付けを
混在できる(混在させざるをえなかった?)のは、Swift の独自仕様だと思う
0594デフォルトの名無しさん2014/07/09(水) 00:51:11.73ID:V9xUyLw3
Java8はOptionalクラスをサポートして、Stream APIっていうので活用してる
まあ、言語仕様自体に組み込まれてるSwiftの方が使い勝手は良さそうだよね
0595デフォルトの名無しさん2014/07/09(水) 00:53:11.40ID:sDYfLtkS
型付けが混在してると言えばgroovyやdart
0596デフォルトの名無しさん2014/07/09(水) 00:55:32.61ID:sDYfLtkS
そう言えばkotlinのnullable型が文法含めてswiftと同じだったかも
0597デフォルトの名無しさん2014/07/09(水) 00:58:48.23ID:SDA1RKlK
mainが無い所は、スクリブトなどの軽量言語に似てるし、デバッグ環境も含めて動的な要素も含んで作られてる様に見える。
ターミナル上でインタプリタlikeに動くのも特筆に値するのでは?
0598デフォルトの名無しさん2014/07/09(水) 01:01:46.20ID:sDYfLtkS
ターミナル上でインタプリタっぽく動くのはreplって名前で大昔からあるよ
0599デフォルトの名無しさん2014/07/09(水) 01:20:33.77ID:D+h9bFI0
遠い遠い太古の昔、まだt-rexが地上の王者として君臨していた頃、terminalの奥深くひっそりと、replはその影を潜めておった。
0600デフォルトの名無しさん2014/07/09(水) 01:20:39.12ID:lknlO7J2
>>594
おぉ Java でも対応されたんだ、知らなかった、ありがとう

というか NullPointerExcption の問題(いわゆる ヌルポ)は、
大昔から指摘され続けていた
これは Java5 で総称型がサポートされた時点で解決できていたハズなのに、
ようやく..... といった感じがする(ラムダ式を待つ必然性は無かったはず)
0601デフォルトの名無しさん2014/07/09(水) 01:31:07.79ID:CAl1OnKc
C#のNullableも言語仕様じゃん
0602デフォルトの名無しさん2014/07/09(水) 02:37:40.83ID:V0tl3oDx
Swiftの任意型ってObjective-Cのnilと同じようなもんじゃないの?
0603デフォルトの名無しさん2014/07/09(水) 04:45:29.09ID:ot7dWtX9
Unmanaged<CGImage>!からUIImageを作成する方法を教えて下さい。
以下の様なコードを書いてみましたが、img2,img3はmissing argumentと言われビルドできず、
filename()では一応ファイル名がとれているのですが、img1はnilが帰ってきてしまいます。
リファレンスを見てinit(CGImage CGImage: CGImage!)を使えるかと思ったのですが…

var img1 = UIImage(named:r.defaultRepresentation().filename())
var img2 = UIImage(CGImage:r.defaultRepresentation().fullResolutionImage())
var img3 = UIImage(CGImage:r.thumbnail())

xcodeはbeta3を使用していて、実行はシミュレータでの結果になります。

-- 該当部分の全コード(改行を減らすため一部{}等をまとめています)
@IBAction func onClick(sender : AnyObject) {
let block2: ALAssetsGroupEnumerationResultsBlock =
{(r,i,s) in
if(r) {
var img1 = UIImage(named:r.defaultRepresentation().filename())
var img2 = UIImage(CGImage:r.defaultRepresentation().fullResolutionImage())
var img3 = UIImage(CGImage:r.thumbnail())
println("¥(r.defaultRepresentation().filename())")
}}
let block1:ALAssetsLibraryGroupsEnumerationResultsBlock =
{(g,p) in if(g) {g.enumerateAssetsUsingBlock(block2)}}

let l = ALAssetsLibrary()
l.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll)
,usingBlock:block1
,failureBlock:{(error) in println("Problem loading albums: ¥(error)")})}
0604デフォルトの名無しさん2014/07/09(水) 08:58:16.58ID:FvPT3vrY
OptionalがあってもEitherがないと片手落ち感ある
まぁクリスは1.0出した後にやるかもしれなくもないみたいなこと言ってたけど
0605デフォルトの名無しさん2014/07/09(水) 11:23:39.40ID:NzqKfchI
結構変わったなぁb3
0606デフォルトの名無しさん2014/07/09(水) 11:43:37.58ID:L1cL1sUs
動的言語ライクに使えることを目指すのなら
PythonやGolangみたいに標準ライブラリが充実しててほしいんだけど、
Cocoaとかいう中途半端なものがあるからなぁ
0607デフォルトの名無しさん2014/07/09(水) 12:24:45.48ID:V4w6/u2b
>>606
動的型付けとライブラリの充実度に関係はないだろ。
あと、Cocoaはアプリ用のライブラリだ。
0608デフォルトの名無しさん2014/07/09(水) 12:27:24.80ID:BA14jeAU
>>606
> 動的言語ライクに使えることを目指すのなら

別に目指してないと思うけど。
CocoaのAPIを直接叩けて文法的に洗練されたものを作りたかっただけだろうから、
動的束縛もその限度で使えれば十分でしょ。
0609デフォルトの名無しさん2014/07/09(水) 12:37:18.51ID:D+h9bFI0
>>606
一介の開発者風情がApple様のお作りになられたSwiftに文句を垂れるなど100万年早いわ
提供されるものを有り難く使えばいいんだよ
あと見つけたバグはちゃんと報告しとけよ
それがお前に出来るせめてもの恩返しだからな
0610デフォルトの名無しさん2014/07/09(水) 12:38:43.44ID:zxLhieEh
静的言語はオブジェクト指向的な動作をしないからイライラするんだよね。
Aを継承してBを作って
Bの変数に入れてBのメソッド起動すればBのメソッドが実行されるのは当たり前だけど
Aの変数に入れて同じメソッドを実行するとなぜかスーパークラス(A)の方が呼ばれるという。
あれ?お前Bじゃなかったん?っていう。
実行オーバーヘッド無くすために、それが実際に何のオブジェクトかはガン無視して、変数の型で呼ばれる関数が決まるんだと。
なのでObjective-Cのプロトコルみたいなことができない。
むかしC++でそういう訳わからない目にあって、それ以来、静的言語が大嫌いになった。
0611デフォルトの名無しさん2014/07/09(水) 12:43:13.50ID:7UJfLcS8
>>610 さすがにそれは無ぇーわw もう一回勉強してこい
0612デフォルトの名無しさん2014/07/09(水) 13:23:31.25ID:9OrXBMkc
SwiftのOptionalってライブラリで定義されている型じゃなくて言語組み込みの機能なの?
0613デフォルトの名無しさん2014/07/09(水) 13:26:44.93ID:7UJfLcS8
そりゃそうだろ
0614デフォルトの名無しさん2014/07/09(水) 13:35:41.85ID:SDA1RKlK
>>612 そうだから使い道も大きい。
0615デフォルトの名無しさん2014/07/09(水) 14:21:22.52ID:D+h9bFI0
Swiftもyacc/lexで作られてんのかね?
0616デフォルトの名無しさん2014/07/09(水) 14:24:28.53ID:xN5CObL0
Swiftが参考にしたというRustとかHaskellでは言語組み込みの機能じゃなく、
標準ライブラリで定義されている普通の型なんだけど、
SwiftでそうなっていないのはSwiftのユーザ定義型の表現力が低いのか、
ほかの言語のOptional型より高機能なのか、
ライブラリでできることはライブラリでやるという思想がないのか。
どれなんですか?
0617デフォルトの名無しさん2014/07/09(水) 14:29:12.89ID:1SU4YkH/
>>610
お前の知識がないだけ
オーバーライドでググれ
0618デフォルトの名無しさん2014/07/09(水) 14:31:02.75ID:D+h9bFI0
>>616
DustとかHaskellって、IntやFloatもOptionalに出来るの?
0619デフォルトの名無しさん2014/07/09(水) 14:46:50.01ID:T0c7+k+3
スバルに謝罪
0620デフォルトの名無しさん2014/07/09(水) 14:48:24.45ID:WHgli7Oz
スズキじゃなかったっけ
0621デフォルトの名無しさん2014/07/09(水) 15:03:45.03ID:SDA1RKlK
>>615 LLVMで作ってる。 
>>616 標準だからこそ、コンパイル時に矛盾を発見できるしARCでプロパティーの監視を出来る。
ライブラリでやったらこう言うルールを適用する事が出来なくなる。
バグが少なくなるしコーディングも楽になる。
0622デフォルトの名無しさん2014/07/09(水) 15:09:38.96ID:V9xUyLw3
>>621
おまえ半端な知識でゴミな書き込み撒き散らしすぎ
プログラミング言語について語るのにyacc/lexが何なのか知らないとか有り得ないだろ
0623デフォルトの名無しさん2014/07/09(水) 15:15:33.69ID:BpA+NCPK
>>617
virtualがデフォじゃない時のC++のこと言っているんだろ
virtualがデフォでない時のC++をあげつらって、それが全てと言うのもなんだと思うが
0624デフォルトの名無しさん2014/07/09(水) 15:17:53.48ID:D+h9bFI0
>>621
>>>615 LLVMで作ってる。

SwiftのソースコードからLLVMの中間言語へ落とし込む構文解析処理のつもりだったんだけど、
LLVMに構文解析ジェネレータ的なツールがあるってこと?
0625デフォルトの名無しさん2014/07/09(水) 15:31:29.83ID:D+h9bFI0
ちょっと調べてみたけど、
SwiftもClang使ってるとしたら、どうやらハンドメイドらしいね

ttp://stackoverflow.com/questions/6319086/are-gcc-and-clang-parsers-really-handwritten
0626デフォルトの名無しさん2014/07/09(水) 15:32:19.69ID:k93gpKQE
OK: var n = Array<Int>.Element(1)
NG: var m = Array<Int>.GeneratorType.Element(1)
0627デフォルトの名無しさん2014/07/09(水) 15:59:26.87ID:7c6OdUYP
>>626
なぜかこれは通る
Array<Int>.SliceType.Element(1)
0628デフォルトの名無しさん2014/07/09(水) 16:21:15.19ID:SDA1RKlK
>>625 どこで見たか忘れたが、clangに実装してるみたいなのを見た覚えがある。
Swing コンパイラのパラメータにclang module のcache pathを指定するオプションが有るから、少なくともclang moduleは使ってるみたい。

Swingは、至る所で型類推を使ってるから、yacc/lexでは無理。
Appleがclangの成果を使うのは自然。
0629デフォルトの名無しさん2014/07/09(水) 16:35:05.29ID:7c6OdUYP
当然Clangベースだろうけど、
型推論は意味解析部の担当だから、yacc/lex は関係ないべ
0630デフォルトの名無しさん2014/07/09(水) 16:35:43.55ID:13pwJSHl
Beta3入れてみたけど、配列の型宣言、例えば
Array<Int> のシンタックスシュガーが Int[] だったのが [Int] に変更されてる。
この書き方はキモい。
0631デフォルトの名無しさん2014/07/09(水) 16:38:26.85ID:FvPT3vrY
http://i.imgur.com/PkgHr1y.png
0632デフォルトの名無しさん2014/07/09(水) 16:41:30.17ID:c4TpZOQ0
>>628
なんでJavaでGUIしようぜ、みたいな話になってんだよw
0633デフォルトの名無しさん2014/07/09(水) 16:45:55.08ID:ELx5bFYc
>>626
バグっぽい
0634デフォルトの名無しさん2014/07/09(水) 17:09:08.81ID:YSvBHpPH
>>630
俺は合理的だと思うぜ
辞書の糖衣構文を[Int: String]にしたら、配列を[Int]にするのは自然だろ?
0635デフォルトの名無しさん2014/07/09(水) 17:32:00.97ID:YSvBHpPH
あと、値の文法と同じなのもよい
[0] -> [Int]
["key": "value"] -> [String: String]

Haskell辺りの受け売りなんだろうか。
0636デフォルトの名無しさん2014/07/09(水) 17:34:11.31ID:ICY9ltLE
キモいと思ったが、なるほど。辞書との類似で考えると自然に見えるな。
0637デフォルトの名無しさん2014/07/09(水) 17:47:42.60ID:pbWvCCMu
>>618
できる。
Rustの場合、メモリ上の表現はタグ+数値になるから、サイズはただのintよりは大きくなる。
Haskellは知らない。
Swiftはどうなるの?

>>621
ARCのプロパティ監視の話は良くわからないけど、
SomeかNoneかのチェック行うのを強制する以上の機能がSwiftにはあるという理解でよい?
0638デフォルトの名無しさん2014/07/09(水) 17:56:08.44ID:FvPT3vrY
Optionalは標準ライブラリでただのenumとして定義されてる
ただ、SomeType? って書き方とか、if let でバインディングしたりとかの
シンタックスシュガーが用意されていて、そういう意味で言語組込み的

自分で enum MyOpt<T> { case Some(T), None } て感じで同等のものを書けるけど
標準のOptionalほど手軽に使えるようにはならんというだけ

ID: SDA1RKlK は言ってること無茶苦茶なので聞くだけ無駄
0639デフォルトの名無しさん2014/07/09(水) 18:04:04.07ID:5irmvKQ3
なんだかわからんがム板のswiftスレと相互に書き込みを勝手コピペする
あたまおかしいのがいるから気をつけたほうがいいぞ
0640デフォルトの名無しさん2014/07/09(水) 18:05:15.10ID:IWdr99Ar
おまえだよ。
0641デフォルトの名無しさん2014/07/09(水) 18:05:54.37ID:SDA1RKlK
>>638
“you must declare every weak reference as having an optional type.”

抜粋: : Inc、Apple. “The Swift Programming Language.” Apple Inc., 2014-07-03T07:00:00Z. iBooks.
この素材は著作権で保護されている可能性があります。

iBooks Storeでこのブックをご覧ください: https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=881256329
0642デフォルトの名無しさん2014/07/09(水) 22:16:33.41ID:ZBnUrNfy
>>638
なるほど。
nullable型みたいな書き方をシンタックスシュガーとして提供してるのは素敵ですね。
0643デフォルトの名無しさん2014/07/09(水) 23:16:05.10ID:9bZjyImW
本家のnullableもそんな感じのシンタックスシュガーだけどね
0644デフォルトの名無しさん2014/07/09(水) 23:41:14.39ID:YYUTfgKI
Swiftのenumがすごいんですけど、これも他の言語にあるんでしょうか?

SwiftyJsonからの抜粋なんですが

enum JSONValue {
case JNumber(NSNumber)
case JString(String)
case JBool(Bool)
case JNull
case JArray(Array<JSONValue>)
case JObject(Dictionary<String,JSONValue>)
case JInvalid(NSError)
/*省略*/

みたいに定義できて要素別にいろんなオブジェクトを持たせられられたり

var first: JSONValue? {
switch self {
case .JArray(let jsonArray) where jsonArray.count > 0:
return jsonArray[0]
/*省略*/
}
}

}

switch文のcaseの中にwhere区を入れて条件追加指定できたりとか。
こんなの初めて見ました。
■ このスレッドは過去ログ倉庫に格納されています