トップページ⇒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/
0680デフォルトの名無しさん2014/07/10(木) 23:28:51.53ID:lVukJkUe
クラスメソッドの記事、オプショナルチェーンの節が書いてること無茶苦茶じゃね?


メソッドも呼び出せる! Swiftの強力な「列挙型」
http://codezine.jp/article/detail/7886?p=3

> このInt?型の返り値に対し、Int型に定義されているdescription()メソッドを呼び出したいとしましょう。(略)
> let numStr: String = "134"
> numStr.toInt().description() // エラー
>
> しかし、「.」の前に「?」を置くことでそれが可能になります。この仕組みがオプショナルチェーンです。
> let numStr: String = "134"
> numStr.toInt()?.description() // Some "134"
0681デフォルトの名無しさん2014/07/10(木) 23:57:21.29ID:D385SCPI
>>679 記事か本に書くネタ探しでしょ。
0682デフォルトの名無しさん2014/07/11(金) 00:29:23.34ID:aG0lM3e/
>ImplicitlyUnwrappedOptionalを強いて日本語に訳すとしたら暗黙的アンラップオプショナルといった具合でしょうか。

クソワロタ。カタカナにしただけじゃねぇか
0683デフォルトの名無しさん2014/07/11(金) 01:01:57.33ID:RRV/Pxnb
暗黙の裸体任意型で良いんじゃね。
0684デフォルトの名無しさん2014/07/11(金) 01:20:04.92ID:CNdrj7fp
これエラーになるんだけど、バグだよね?
class A {}
class B : A {}
protocol AAA { func hoge(x: B) }
class Hoge : AAA { func hoge(x: A) {} }
0685デフォルトの名無しさん2014/07/11(金) 02:23:59.31ID:MKluaUW0
前スレ609でイニシャライザ(コンストラクタ)とメソッドと関数で呼び方違うのがきもいって書いたけど、
定義するときの書き方が違うだけで一応どの書き方でも書けるんだな
・イニシャライザ
init(message: String, to: String) {...} // 全部キーワードつける
init(_ message: String, to: String) {...} // 最初だけキーワードつけない
init(_ message: String, _ to: String) {...} // 全部キーワードつけない
・メソッド
func say(message msg: String, to: String) {...} // 全部キーワードつける
func sayMessage(message: String, to: String) {...} // 最初だけキーワードつけない
func sayMessageTo(message: String, _ to: String) {...} // 全部キーワードつけない
・関数
func print(message msg: String, to target: String) {...} // 全部キーワードつける
func printMessage(message: String, to target: String) {...} // 最初だけキーワードつけない
func printMessageTo(message: String, to: String) {...} // 全部キーワードつけない
0686デフォルトの名無しさん2014/07/11(金) 08:14:28.21ID:uNtAoQ80
SmalltalkやApple以外のObjective-CだったらObjectを作るときはInstaece creatonを
使う方法が一般的だったんだが、
なんで初期化子を直呼びする様になったんだ。
不便極まりない。
0687デフォルトの名無しさん2014/07/11(金) 08:17:27.29ID:PGMEzY6R
他の言語で一般的=正しい
という至極真っ当でAppleらしからぬ思想の言語だから
0688デフォルトの名無しさん2014/07/11(金) 08:17:36.76ID:mjjIchhE
>>680
>Int型に定義されているdescription()メソッド
description はメソッドじゃなくてプロパティ

>numStr.toInt().description() // エラー
エラーになるのはメソッドとして呼ぼうとしてるからで
numStr.toInt().description // これなら普通におk

>しかし、「.」の前に「?」を置くことでそれが可能になります。
>numStr.toInt()?.description() // Some "134"
だから .description() ってやってる限り無理だっつってんだろ


こいつコード動くか実際に試さず書いてるな
これだからクラスメソッドは信用できないんだ
0689デフォルトの名無しさん2014/07/11(金) 10:55:34.77ID:Lx3So7Yg
RT >686
0690デフォルトの名無しさん2014/07/11(金) 11:08:18.34ID:MKluaUW0
>>685で全部キーワードつけられることがわかったので、
そのときのObjCとSwiftのブリッジングってどうなってるんだろう?と思って試してみたら
Swift→ObjCは
init(message: String, to: String) → initWithMessage: to:
init(_ message: String, to: String) → init: to:
init(_ message: String, _ to: String) → init: :
・メソッド
func say(message msg: String, to: String) → sayWithMessage: to:
func say(message: String, to: String) → say: to:
func say(message: String, _ to: String) → say: :
ObjC→Swiftは
initWithA: b: → init(a: 〜, b: 〜)
みたいにメソッド名が自動変換されるんだな
じゃぁ func say(message msg: String, to: String) の他に func sayWithMessage(message: String, to: String) とか、
initWithA: B: の他に initA: B: とかがあったら同じ名前になって競合するんじゃねーの?と思ったら、片方が無かったことにされた・・・
まぁ、実際そんな名前ついたイニシャライザやメソッドがあるなんてことは無いだろうし、問題は起きないんだろうけど
0691デフォルトの名無しさん2014/07/11(金) 11:27:42.48ID:CNdrj7fp
というかdescriptionは、IntにもOptional<T>にも定義されてるから
numStr.toInt()?.description でも
numStr.toInt().description でもコンパイル通るのよ
こんな特殊なものを例に上げたのがまちがい
0692デフォルトの名無しさん2014/07/11(金) 12:38:41.57ID:jyGo9R2g
>>684
http://stackoverflow.com/questions/24682387
0693デフォルトの名無しさん2014/07/11(金) 13:13:47.55ID:GkReUTvU
>>689
?
0694デフォルトの名無しさん2014/07/11(金) 19:39:36.60ID:jyGo9R2g
循環参照に怯えながらコードを書くのがApple開発の醍醐味
0695デフォルトの名無しさん2014/07/11(金) 22:48:06.60ID:izMO91L2
あるあるすぎる
0696デフォルトの名無しさん2014/07/12(土) 01:43:26.47ID:pUnCThIk
ためしにSwiftからシステムコール呼んだりしてみてるけど、
C言語との連携は結構よくできてるわ
0697デフォルトの名無しさん2014/07/12(土) 02:16:53.71ID:R5OtEg7d
>>696 簡単なサンプル上げて。
0698デフォルトの名無しさん2014/07/12(土) 02:42:46.74ID:pUnCThIk
>>697
mmapでバイナリファイル読む例
http://codepad.org/SQH29SHl
0699デフォルトの名無しさん2014/07/12(土) 06:52:52.22ID:Pi6lV0ru
適当なアルゴリズム実装してReleaseビルドしたらPythonより遅い
そんな馬鹿なと思ってプロファイラ見たら配列生成の内部ストレージ確保が
めっちゃ時間食ってるみたい
0700デフォルトの名無しさん2014/07/12(土) 08:44:15.61ID:7baV5ONW
タダでも使えるようになったな
0701デフォルトの名無しさん2014/07/12(土) 13:57:25.38ID:R5OtEg7d
公式Swiftブログからダウンロード出来る。
https://developer.apple.com/swift/blog/
0702デフォルトの名無しさん2014/07/12(土) 14:17:49.48ID:R5OtEg7d
SwiftでJavaScript
http://qiita.com/dankogai/items/052a3ad6f32d114a33fc
0703デフォルトの名無しさん2014/07/12(土) 19:20:58.04ID:xLJj+FnH
どーでもいいけどSwiftのソースファイルの拡張子って.swiftなのね…。
0704デフォルトの名無しさん2014/07/12(土) 19:24:00.64ID:BxmHv/rK
>>703
アップルはすぐ長ったらしい拡張子つけるよね。xcworkspaceとか。
てか、拡張子って3文字以下じゃないと駄目みたいな決まりなかったっけ?
swfとかでいいのにね。
0705デフォルトの名無しさん2014/07/12(土) 19:31:52.68ID:xLJj+FnH
>>704
確かに
.xcodeprojとかもあったな
ところで.swfは釣りっすか?w
0706デフォルトの名無しさん2014/07/12(土) 19:40:07.02ID:hFyjpWla
ショックウェーブフラーッシュ!
0707デフォルトの名無しさん2014/07/12(土) 19:54:39.63ID:6CFefVBC
拡張子3文字とかいつの時代のドザだよ
0708デフォルトの名無しさん2014/07/12(土) 19:56:25.31ID:CDlL/Wk/
>>704
それはMS-DOSというかその前のCP/Mの制限だな。ファイル名8文字+拡張子3文字。
UNIXなんかは元々ファイルシステム上では単一の文字列でピリオド以降を拡張子として解釈するだけだから特に制限はない。
昔のMacOSだとファイル名と別に4文字までのTYPEが付けられる。
0709デフォルトの名無しさん2014/07/12(土) 19:58:38.41ID:QxcUStnc
Microsoftも最近は普通にvcxprojつか長いの使うよ
0710デフォルトの名無しさん2014/07/12(土) 19:59:03.13ID:awTqtEB0
>>704
拡張子が3文字以下なことが多いのは、大昔の制限の名残だよ。
swiftは5文字なんだからそのままでいいでしょ
Scalaの拡張子もscalaだし
0711デフォルトの名無しさん2014/07/12(土) 20:14:12.27ID:CKeavNXA
>>710
冷静に考えよう
scala が 3文字になったら sca ですよ
0712デフォルトの名無しさん2014/07/12(土) 20:15:43.85ID:uQaOo2aV
>>709
そりゃプロジェクトファイルなんて数が少ないからどうでもいいんだよ
MSはソースファイルの拡張子は長くしない
0713デフォルトの名無しさん2014/07/12(土) 21:17:23.03ID:HSia6VRM
可変長配列 [1,2,3] を100万個作るのにかかる時間
C++ (vector) --> 0.068秒
Python -> 0.173秒
Ruby --> 0.169秒
Swift (-Ofast付き) -> 2.32 秒

正式リリースまでにはまともになるのだろうか
0714デフォルトの名無しさん2014/07/12(土) 21:23:12.71ID:74gS95aI
objcと比較しないと意味ないのん
0715デフォルトの名無しさん2014/07/12(土) 21:28:51.25ID:YFp0R0a/
>>704
FATファイルシステムの制限だよね。
0716デフォルトの名無しさん2014/07/12(土) 21:39:21.19ID:HSia6VRM
>>714
測ってみた
ObjC (NSArray) --> 0.414秒
0717デフォルトの名無しさん2014/07/12(土) 21:43:46.26ID:74gS95aI
それはひどいのん
0718デフォルトの名無しさん2014/07/12(土) 21:52:52.01ID:I6M2/WNb
Obj-Cより早ぇんじゃなかったのかよ
糞言語だな
0719デフォルトの名無しさん2014/07/12(土) 21:59:41.56ID:6CFefVBC
* ベータ版です
0720デフォルトの名無しさん2014/07/12(土) 22:07:44.47ID:R5OtEg7d
配列はかなり無理して仕様変更したばかりだしスピードチューニングはこれからだろ。

作っておけば勝手に早くなってくれるんだから気にすることは無い。
0721デフォルトの名無しさん2014/07/12(土) 22:15:35.10ID:ktHPdOby
>>731
スレチになるけど、Python と Ruby の差が
予想以上に小さいことに驚いた
何か魔法を使っている?
それとも Python 最速伝説は幻想だったのかなぁ ....
07227212014/07/12(土) 22:16:40.41ID:ktHPdOby
アンカをミスしてた
>>713 に訂正
0723デフォルトの名無しさん2014/07/12(土) 22:19:33.25ID:UUivqCYR
>>721
rubyは1.9からVMになってて、かなり高速化した。
まあ、配列作るだけのベンチマークにどれだけ意味があるのか分からんが
0724デフォルトの名無しさん2014/07/12(土) 22:23:10.11ID:QxcUStnc
最適化で削除されているということはない?
0725デフォルトの名無しさん2014/07/12(土) 22:36:49.50ID:B7XGURdf
ちなみに配列の操作はそれほど遅くないよ、配列作るのだけ異常に遅い
ディクショナリ型はどうかなぁ
0726デフォルトの名無しさん2014/07/12(土) 22:42:25.77ID:74gS95aI
python最速伝説初耳なのん
0727デフォルトの名無しさん2014/07/13(日) 00:01:10.09ID:2r9XuANi
>>704
Windowsにもthemeやmanifestなんて拡張子が増えたね
0728デフォルトの名無しさん2014/07/13(日) 03:27:41.34ID:hh7t9GxI
RT >724
0729デフォルトの名無しさん2014/07/13(日) 03:28:55.46ID:hh7t9GxI
>>727
そのうち拡張子にホワイトスペースが含まれる時代がもうすぐ
0730デフォルトの名無しさん2014/07/13(日) 08:43:44.21ID:FukqOMB8
>>678
おまえのソース、みたくないものだな
0731デフォルトの名無しさん2014/07/13(日) 12:53:54.09ID:f0JToqLx
Appleがブログやるなんて時代は変わるもので、
この調子でSwiftコンパイラとlibswift_stdlibもオープンソースにしてくだしあ
0732デフォルトの名無しさん2014/07/13(日) 12:56:08.02ID:zSV3XHBM
ActionScriptにも似てる気がするなSwiftは

Cの良さを捨て去ったSwiftは許せん
0733デフォルトの名無しさん2014/07/13(日) 13:20:52.58ID:hh7t9GxI
Cの良さって
0734デフォルトの名無しさん2014/07/13(日) 13:54:25.32ID:Xj6Z/8Xz
ブログ始めたのか
三日坊主にならなきゃいいが
0735デフォルトの名無しさん2014/07/13(日) 13:59:12.52ID:XamuTFgi
社員がフォーラムに書き散らかしてることまとめてくれるだけでも十分ですわ
https://github.com/ksm/SwiftInFlux
0736デフォルトの名無しさん2014/07/13(日) 14:22:15.47ID:Au996OtX
へぇ、llvm/clangプロジェクトの創始者が担当してるのか
じゃあ安心して今後の改善に期待していいかな?
0737デフォルトの名無しさん2014/07/13(日) 14:42:18.87ID:09pjGLVO
>>735 これはどう言う意味?
> full grapheme clusters, which are composed of multiple code points.


Character

Note that Character is still evolving and will settle down by the final release of 1.0.
One of the reasons that we use double quote syntax to initialize Characters is that they are expected to be able to hold full grapheme clusters, which are composed of multiple code points. This will roll out in a later beta.

-- Chris Lattner

grapheme 字素
http://m.kotobank.jp/word/グラフィーム
0738デフォルトの名無しさん2014/07/13(日) 14:47:04.79ID:XamuTFgi
>>737
アクセントや濁点等の結合文字とか、サロゲートペアとか
文字コード上では2文字でも見た目が1文字なら1文字のCharacterとして扱うということでしょ
0739デフォルトの名無しさん2014/07/13(日) 14:48:19.25ID:Au996OtX
var c:Character = "\u0065\u0306"
こういうこと
0740デフォルトの名無しさん2014/07/13(日) 14:52:53.43ID:09pjGLVO
>>738 有難う。 そう言うことか。 ヨーロッパの人達は困ってたのかな。
日本も昔のASCII時代の濁点は困ってたけど。
0741デフォルトの名無しさん2014/07/13(日) 14:57:34.52ID:BT8HK/tO
>>731
多忙すぎてオープンソースにするかどうかの議論すらやる暇ないそうな
http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-June/073698.html
0742デフォルトの名無しさん2014/07/13(日) 16:15:17.48ID:mp4RlYuS
まだベータではなくアルファクオリティである
がんばれ
0743デフォルトの名無しさん2014/07/14(月) 15:34:51.35ID:lReUhcBf
http://www.weheartswift.com/make-awesome-ui-components-ios-8-using-swift-xcode-6/
あー、SwiftのREPLってこういう恩恵もあるのか
これは地味に嬉しい
0744デフォルトの名無しさん2014/07/14(月) 16:24:45.59ID:JENp6B27
これはXcode6から追加されるLive Renderingっていう機能で、
Objective-Cでも使えるよ、repl関係ないよ
0745デフォルトの名無しさん2014/07/14(月) 16:32:30.07ID:GToJEt01
Android非対応なのかよ
こんなクローズドな言語イラネ
0746デフォルトの名無しさん2014/07/14(月) 16:50:08.98ID:xs99ZBfy
GoogleがSwiftを採用するかどうかの問題でここで文句言うのは筋違い
0747デフォルトの名無しさん2014/07/14(月) 16:58:55.70ID:lReUhcBf
>>744
ありゃ、そうなのかすまん
IB上ですぐ反映されるっていうから例のPlaygroundみたいに裏で実行してるのかと思ったよ
0748デフォルトの名無しさん2014/07/14(月) 17:08:43.73ID:Z5ME5LpP
SwiftでPerlて、老害もたいがいにしとけよ
0749デフォルトの名無しさん2014/07/14(月) 17:10:01.47ID:4Au1+Pyc
REPLとPerlの区別が付かない人?
0750デフォルトの名無しさん2014/07/14(月) 17:10:03.91ID:sQKqFHYb
  、ミ川川川彡                 ,ィr彡'";;;;;;;;;;;;;;;
  ミ       彡              ,.ィi彡',.=从i、;;;;;;;;;;;;
 三  ギ  そ  三            ,ィ/イ,r'" .i!li,il i、ミ',:;;;;
 三.  ャ  れ  三    ,. -‐==- 、, /!li/'/   l'' l', ',ヾ,ヽ;
 三  グ  は  三  ,,__-=ニ三三ニヾヽl!/,_ ,_i 、,,.ィ'=-、_ヾヾ
 三  で       三,. ‐ニ三=,==‐ ''' `‐゛j,ェツ''''ー=5r‐ォ、, ヽ
 三.   言  ひ  三  .,,__/      . ,' ン′    ̄
 三   っ  ょ  三   /           i l,
 三.  て   っ  三  ノ ..::.:... ,_  i    !  `´'      J
 三   る  と  三  iェァメ`'7rュ、,ー'    i }エ=、
  三   の   し  三 ノ "'    ̄     ! '';;;;;;;
  三   か  て  三. iヽ,_ン     J   l
  三  !?    三  !し=、 ヽ         i         ,.
   彡      ミ   ! "'' `'′      ヽ、,,__,,..,_ィ,..r,',",
    彡川川川ミ.   l        _, ,   | ` ー、≡=,ン _,,,
              ヽ、 _,,,,,ィニ三"'"  ,,.'ヘ rー‐ ''''''"
                `, i'''ニ'" ,. -‐'"   `/
               ヽ !  i´       /
               ノレ'ー'!      / O
0751デフォルトの名無しさん2014/07/14(月) 17:28:00.59ID:KGa9EEJe
SwiftでPerl
http://qiita.com/dankogai/items/d63dfda25088165deed5
0752デフォルトの名無しさん2014/07/14(月) 17:29:22.60ID:KGa9EEJe
>>749 多分発想が豊かな人なんだろう。
0753デフォルトの名無しさん2014/07/14(月) 19:04:49.66ID:RZ62ioTL
>>746
C#とか、Rubyとか、Googleは採用してませんが
0754デフォルトの名無しさん2014/07/14(月) 20:17:16.27ID:DuRBXQUq
>>749
(そこ、笑うとこやで、兄やんっ)
0755デフォルトの名無しさん2014/07/14(月) 20:20:50.32ID:xs99ZBfy
>>753
俺に言うな。>>745をよく見なさいw
0756デフォルトの名無しさん2014/07/14(月) 21:51:45.56ID:whZx8tfP
Androidで動いたら全力で訴訟だろうなあ
もしくはマルチ禁止とか無茶苦茶な規約を発動して潰すはず
0757デフォルトの名無しさん2014/07/14(月) 21:55:50.47ID:xs99ZBfy
clangでpublic化させる予定みたいだけど。で、その>>756の根拠は?まさか妄想?
0758デフォルトの名無しさん2014/07/14(月) 22:02:32.94ID:JENp6B27
一般的にはプログラミング言語の言語仕様に特許は生じない
0759デフォルトの名無しさん2014/07/15(火) 01:13:25.82ID:micTd99E
著作権があればええやん
0760デフォルトの名無しさん2014/07/15(火) 01:15:01.52ID:wY3QqZWc
>>758
javaは?
0761デフォルトの名無しさん2014/07/15(火) 06:09:34.87ID:G0sBDiLW
Oracle許さない
0762デフォルトの名無しさん2014/07/15(火) 09:54:28.35ID:X+1U4btA
>>760
あれって実装コードがかぶっていたかららしい。
言語仕様が対象ではない
0763デフォルトの名無しさん2014/07/15(火) 10:30:28.32ID:r2pgp0My
Oracle対GoogleのJava裁判はまだ決着ついてない
JavaのAPI仕様自体には著作権無いって判決が一審で出たんだけど
Oracleが控訴したら二審でこれが覆っちゃってちょっと大変なことになってる
API仕様に著作権あるってことで、このまま確定しちゃいそう
0764デフォルトの名無しさん2014/07/15(火) 10:50:56.90ID:8APAVMM9
それは今までのクリーンルームだのを覆す大変なことやなあ
0765デフォルトの名無しさん2014/07/15(火) 11:13:35.72ID:ySYgfKOJ
>>763
んなあほな。NFSにせよSolarisにしろAPIをオープンにするってのが、サンの戦略だったのに……
0766デフォルトの名無しさん2014/07/15(火) 12:00:46.30ID:og7aDLMg
オープンにする事と著作権があることは別問題。
0767デフォルトの名無しさん2014/07/15(火) 12:05:19.99ID:AlmaazeQ
犬も歩けば棒に当たる。
0768デフォルトの名無しさん2014/07/15(火) 12:11:56.15ID:j3zFGvRv
論より証拠
0769デフォルトの名無しさん2014/07/15(火) 12:23:24.29ID:7MWYl2Sv
ロンそれフリテン
0770デフォルトの名無しさん2014/07/15(火) 13:15:50.71ID:YSAyaOR/
みんな自由に使って盛り上げてくれ!
↓
じゃあ、俺が改変して使いやすくしたのおまえよりいっぱい配るわ
↓
ちょ!おま…

だいたいこんな
0771デフォルトの名無しさん2014/07/15(火) 13:39:50.89ID:4zlWl4sH
まあOracleだし
0772デフォルトの名無しさん2014/07/15(火) 14:14:00.73ID:zrHbAgn8
>>765
黙れ小僧、お前にサンが救えるか
0773デフォルトの名無しさん2014/07/15(火) 14:17:28.25ID:r2pgp0My
Googleがサンを救えば世界は平和になったのか
0774デフォルトの名無しさん2014/07/15(火) 14:24:13.13ID:ySYgfKOJ
>>773
Javaがもっと最前線で熱い言語になってただろう
0775デフォルトの名無しさん2014/07/15(火) 15:05:37.10ID:crlBJ/uW
その結果がDartだよ!


ここなんのスレだっけ
0776デフォルトの名無しさん2014/07/15(火) 17:40:26.17ID:AlmaazeQ
ここはSwiftのスレです。
0777デフォルトの名無しさん2014/07/16(水) 00:17:19.37ID:zFOkDjlK
GoogleがここでJava捨てたらまた周回遅れだもんなあ
0778デフォルトの名無しさん2014/07/16(水) 11:06:00.57ID:CCnp7m7G
>>777
そこはぜひgolangで。
並列処理が書きやすいので、GUIなアプリって結構向いてると思うんだけどなぁ。
0779デフォルトの名無しさん2014/07/16(水) 12:11:04.92ID:dtGU31iT
スクリプトをプログラミング言語というのはおかしいな
■ このスレッドは過去ログ倉庫に格納されています