Swift part2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/06/11(水) 14:42:15.02ID:+13mKJ0ZApple 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/
0609デフォルトの名無しさん
2014/07/09(水) 12:37:18.51ID:D+h9bFI0一介の開発者風情がApple様のお作りになられたSwiftに文句を垂れるなど100万年早いわ
提供されるものを有り難く使えばいいんだよ
あと見つけたバグはちゃんと報告しとけよ
それがお前に出来るせめてもの恩返しだからな
0610デフォルトの名無しさん
2014/07/09(水) 12:38:43.44ID:zxLhieEhAを継承してBを作って
Bの変数に入れてBのメソッド起動すればBのメソッドが実行されるのは当たり前だけど
Aの変数に入れて同じメソッドを実行するとなぜかスーパークラス(A)の方が呼ばれるという。
あれ?お前Bじゃなかったん?っていう。
実行オーバーヘッド無くすために、それが実際に何のオブジェクトかはガン無視して、変数の型で呼ばれる関数が決まるんだと。
なのでObjective-Cのプロトコルみたいなことができない。
むかしC++でそういう訳わからない目にあって、それ以来、静的言語が大嫌いになった。
0611デフォルトの名無しさん
2014/07/09(水) 12:43:13.50ID:7UJfLcS80612デフォルトの名無しさん
2014/07/09(水) 13:23:31.25ID:9OrXBMkc0613デフォルトの名無しさん
2014/07/09(水) 13:26:44.93ID:7UJfLcS80614デフォルトの名無しさん
2014/07/09(水) 13:35:41.85ID:SDA1RKlK0615デフォルトの名無しさん
2014/07/09(水) 14:21:22.52ID:D+h9bFI00616デフォルトの名無しさん
2014/07/09(水) 14:24:28.53ID:xN5CObL0標準ライブラリで定義されている普通の型なんだけど、
SwiftでそうなっていないのはSwiftのユーザ定義型の表現力が低いのか、
ほかの言語のOptional型より高機能なのか、
ライブラリでできることはライブラリでやるという思想がないのか。
どれなんですか?
0617デフォルトの名無しさん
2014/07/09(水) 14:29:12.89ID:1SU4YkH/お前の知識がないだけ
オーバーライドでググれ
0618デフォルトの名無しさん
2014/07/09(水) 14:31:02.75ID:D+h9bFI0DustとかHaskellって、IntやFloatもOptionalに出来るの?
0619デフォルトの名無しさん
2014/07/09(水) 14:46:50.01ID:T0c7+k+30620デフォルトの名無しさん
2014/07/09(水) 14:48:24.45ID:WHgli7Oz0621デフォルトの名無しさん
2014/07/09(水) 15:03:45.03ID:SDA1RKlK>>616 標準だからこそ、コンパイル時に矛盾を発見できるしARCでプロパティーの監視を出来る。
ライブラリでやったらこう言うルールを適用する事が出来なくなる。
バグが少なくなるしコーディングも楽になる。
0622デフォルトの名無しさん
2014/07/09(水) 15:09:38.96ID:V9xUyLw3おまえ半端な知識でゴミな書き込み撒き散らしすぎ
プログラミング言語について語るのにyacc/lexが何なのか知らないとか有り得ないだろ
0623デフォルトの名無しさん
2014/07/09(水) 15:15:33.69ID:BpA+NCPKvirtualがデフォじゃない時のC++のこと言っているんだろ
virtualがデフォでない時のC++をあげつらって、それが全てと言うのもなんだと思うが
0624デフォルトの名無しさん
2014/07/09(水) 15:17:53.48ID:D+h9bFI0>>>615 LLVMで作ってる。
SwiftのソースコードからLLVMの中間言語へ落とし込む構文解析処理のつもりだったんだけど、
LLVMに構文解析ジェネレータ的なツールがあるってこと?
0625デフォルトの名無しさん
2014/07/09(水) 15:31:29.83ID:D+h9bFI0SwiftもClang使ってるとしたら、どうやらハンドメイドらしいね
ttp://stackoverflow.com/questions/6319086/are-gcc-and-clang-parsers-really-handwritten
0626デフォルトの名無しさん
2014/07/09(水) 15:32:19.69ID:k93gpKQENG: var m = Array<Int>.GeneratorType.Element(1)
0627デフォルトの名無しさん
2014/07/09(水) 15:59:26.87ID:7c6OdUYPなぜかこれは通る
Array<Int>.SliceType.Element(1)
0628デフォルトの名無しさん
2014/07/09(水) 16:21:15.19ID:SDA1RKlKSwing コンパイラのパラメータにclang module のcache pathを指定するオプションが有るから、少なくともclang moduleは使ってるみたい。
Swingは、至る所で型類推を使ってるから、yacc/lexでは無理。
Appleがclangの成果を使うのは自然。
0629デフォルトの名無しさん
2014/07/09(水) 16:35:05.29ID:7c6OdUYP型推論は意味解析部の担当だから、yacc/lex は関係ないべ
0630デフォルトの名無しさん
2014/07/09(水) 16:35:43.55ID:13pwJSHlArray<Int> のシンタックスシュガーが Int[] だったのが [Int] に変更されてる。
この書き方はキモい。
0631デフォルトの名無しさん
2014/07/09(水) 16:38:26.85ID:FvPT3vrY0632デフォルトの名無しさん
2014/07/09(水) 16:41:30.17ID:c4TpZOQ0なんでJavaでGUIしようぜ、みたいな話になってんだよw
0633デフォルトの名無しさん
2014/07/09(水) 16:45:55.08ID:ELx5bFYcバグっぽい
0634デフォルトの名無しさん
2014/07/09(水) 17:09:08.81ID:YSvBHpPH俺は合理的だと思うぜ
辞書の糖衣構文を[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:ICY9ltLE0637デフォルトの名無しさん
2014/07/09(水) 17:47:42.60ID:pbWvCCMuできる。
Rustの場合、メモリ上の表現はタグ+数値になるから、サイズはただのintよりは大きくなる。
Haskellは知らない。
Swiftはどうなるの?
>>621
ARCのプロパティ監視の話は良くわからないけど、
SomeかNoneかのチェック行うのを強制する以上の機能がSwiftにはあるという理解でよい?
0638デフォルトの名無しさん
2014/07/09(水) 17:56:08.44ID:FvPT3vrYただ、SomeType? って書き方とか、if let でバインディングしたりとかの
シンタックスシュガーが用意されていて、そういう意味で言語組込み的
自分で enum MyOpt<T> { case Some(T), None } て感じで同等のものを書けるけど
標準のOptionalほど手軽に使えるようにはならんというだけ
ID: SDA1RKlK は言ってること無茶苦茶なので聞くだけ無駄
0639デフォルトの名無しさん
2014/07/09(水) 18:04:04.07ID:5irmvKQ3あたまおかしいのがいるから気をつけたほうがいいぞ
0640デフォルトの名無しさん
2014/07/09(水) 18:05:15.10ID:IWdr99Ar0641デフォルトの名無しさん
2014/07/09(水) 18:05:54.37ID:SDA1RKlK“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なるほど。
nullable型みたいな書き方をシンタックスシュガーとして提供してるのは素敵ですね。
0643デフォルトの名無しさん
2014/07/09(水) 23:16:05.10ID:9bZjyImW0644デフォルトの名無しさん
2014/07/09(水) 23:41:14.39ID:YYUTfgKISwiftyJsonからの抜粋なんですが
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区を入れて条件追加指定できたりとか。
こんなの初めて見ました。
0645デフォルトの名無しさん
2014/07/09(水) 23:52:00.81ID:9bZjyImWSwiftのそれに一番似てるのはScalaかな
0646デフォルトの名無しさん
2014/07/09(水) 23:54:49.87ID:sDYfLtkS0647デフォルトの名無しさん
2014/07/09(水) 23:55:12.30ID:V9xUyLw30648デフォルトの名無しさん
2014/07/10(木) 00:00:44.87ID:VGRzIMNM0649デフォルトの名無しさん
2014/07/10(木) 00:34:36.38ID:OizG2bfl言語ヲタ集がプンプンするスレだな
0650デフォルトの名無しさん
2014/07/10(木) 00:42:24.85ID:0msrkDWD0651デフォルトの名無しさん
2014/07/10(木) 00:55:50.19ID:Y0rbSAXSデータ型の一つに直和型というものがある
・直和とは集合を互いに交わりの無い部分集合へ分割することを意味する[数学用語]
・Haskell では代数型と、教科書「型システム入門」ではバリアント型とも ....)
・ 他にレコードやタプルは直積型に分類される
このSwift のswitch文は、この直和型を有効利用するために導入された構文になる
そして、他の人達(>>645-648)が指摘しているように、静的型付けな関数型言語の世界では、
すでに直和型とパターンマッチによる多分岐はありふれた存在になっている
で、ここからが本題なんだけど、直和型というのは関数型言語の専売特許ではなくて、
Pascal(Delphi)におけるレコード型の可変フィール(variant field)や
Adaの可変レコード型(variant record type)として、手続き型では古い時代から知られていた
ところがOOP言語が世の常識となるにつれ、直和型の概念が多くのプログラマから忘れられた
さて、ここで Apple は(関数型言語ではない) Swift で直和型を復活させたことになるのだけど、
これが意味するものは何か、近未来の新言語設計にどんなインパクトを与えるのか.....
なかなか興味深い話題だと思う
0652デフォルトの名無しさん
2014/07/10(木) 01:07:29.71ID:rjypBW2y0653デフォルトの名無しさん
2014/07/10(木) 01:22:21.83ID:O9lWsLgo絶賛コメだけじゃなく冷静な批評でもいいのよ
0654デフォルトの名無しさん
2014/07/10(木) 01:24:54.21ID:9na9WfzA0655デフォルトの名無しさん
2014/07/10(木) 02:33:50.13ID:BC+DaKWG「そんなにAppleが憎いなら使わなくていいのよ?」
で、あたまおかしな人を即パージできるからな。
0656デフォルトの名無しさん
2014/07/10(木) 03:28:17.54ID:E7hqdO7Dエポックメイキングな言語とはいえないよね
他の言語を参考に適当に混ぜてちょっとだけ特色出してみましたw
的な言語
そういう意味では、MSのTypeScriptや、GoogleのGo言語を後追いしたにすぎないね
0657デフォルトの名無しさん
2014/07/10(木) 04:25:12.25ID:maMZBDnX0658デフォルトの名無しさん
2014/07/10(木) 05:51:18.93ID:D385SCPI誰がなんと言おうと、Appleにとって最善の言語となった。
終わり
0659デフォルトの名無しさん
2014/07/10(木) 11:17:45.53ID:Z+u99TiJこんどはARMになってCocoaが葬り去されるんですね楽しみです
0660デフォルトの名無しさん
2014/07/10(木) 11:57:24.05ID:Z+u99TiJhttps://gist.github.com/mattt/f457625af116721ffb57
0661デフォルトの名無しさん
2014/07/10(木) 12:08:09.28ID:WUOyQ2abCocoaはそのままだろ
0662デフォルトの名無しさん
2014/07/10(木) 12:10:20.82ID:jxZKmF3sAPIと言語の違いが分からないような人に近付いちゃダメ。
0663デフォルトの名無しさん
2014/07/10(木) 12:25:15.94ID:Z+u99TiJ0664デフォルトの名無しさん
2014/07/10(木) 12:39:58.73ID:xv3o/8yi現実的には言語とAPIは密接に関係してるから
そのうちSwiftネイティブなAPIセットを作るんじゃねというのは
あながちおかしなこと言ってるわけでもないと思う
0665デフォルトの名無しさん
2014/07/10(木) 12:41:47.50ID:xv3o/8yi0666デフォルトの名無しさん
2014/07/10(木) 13:08:56.63ID:GRhY2avWそれにSwiftから見たCocoaは
Implicitly Unwrapped Optionalだらけの魔界だ
真にType safetyな世界に行くには、1からAPIを作り直すほか無いだろう
0667デフォルトの名無しさん
2014/07/10(木) 13:56:03.17ID:xv3o/8yi0668デフォルトの名無しさん
2014/07/10(木) 14:06:43.59ID:o0OR8ld+as?ではなくas使う時点で危険と認識すればよし
0669デフォルトの名無しさん
2014/07/10(木) 16:18:30.34ID:NUwbDbLiCoreFoundationはどこに位置するの?
0670デフォルトの名無しさん
2014/07/10(木) 16:33:09.15ID:U0c3Ed3Kconvenient initとdesignated initが言語仕様として区別されるとか
super.init を呼びわすれるとコンパイルが通らないとか
0671デフォルトの名無しさん
2014/07/10(木) 16:43:07.44ID:lVukJkUe数学記号のこと言ってるなら
https://devforums.apple.com/message/1000934#1000934
> It's not documented yet, but the set of allowed operator characters
> includes 'math' and 'symbol' characters in the Unicode BMP,
> and operator characters can be augmented with combining characters.
> The full set of supported characters will be documented in one of the following seeds.
0672デフォルトの名無しさん
2014/07/10(木) 16:49:23.73ID:jYdaLKAGうんこの絵文字とかはダメなのか
しかし、こんな機能必要かねぇ
0673デフォルトの名無しさん
2014/07/10(木) 16:56:56.80ID:rqwHIJIbああ、当然こういうことも出来るのか。すげえな楽しいわ。
0674デフォルトの名無しさん
2014/07/10(木) 19:09:01.95ID:XIjKZonp0675デフォルトの名無しさん
2014/07/10(木) 19:23:27.83ID:vGHCaEiD理由がわからん
0676デフォルトの名無しさん
2014/07/10(木) 19:25:27.65ID:rqwHIJIb0677デフォルトの名無しさん
2014/07/10(木) 19:27:00.67ID:jYdaLKAGNSInvocationを使ってる NSUndoManager がふつうに使えたので安心した
0678デフォルトの名無しさん
2014/07/10(木) 23:13:49.04ID:Y22Tg+si#define 判定 if
#define 次の間繰り返す while
#define 戻す return
#define 次の別名を作る typedef
次の別名を作る void 無し;
次の別名を作る char 文字;
次の別名を作る int 整数;
次の別名を作る float 単精度浮動小数
次の別名を作る double 倍精度浮動少数
#define 短い short
#define 長い long
#define 符号付き signed
#define 符号無し unsigned
#define 入出力用 volatile
#define 不変 const
#define 可変 mutable
#define 穏健 static
#define 名前空間 namespace
#define 使う using
0679デフォルトの名無しさん
2014/07/10(木) 23:25:09.13ID:P/v5Wc4f0680デフォルトの名無しさん
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:D385SCPI0682デフォルトの名無しさん
2014/07/11(金) 00:29:23.34ID:aG0lM3e/クソワロタ。カタカナにしただけじゃねぇか
0683デフォルトの名無しさん
2014/07/11(金) 01:01:57.33ID:RRV/Pxnb0684デフォルトの名無しさん
2014/07/11(金) 01:20:04.92ID:CNdrj7fpclass 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定義するときの書き方が違うだけで一応どの書き方でも書けるんだな
・イニシャライザ
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使う方法が一般的だったんだが、
なんで初期化子を直呼びする様になったんだ。
不便極まりない。
0687デフォルトの名無しさん
2014/07/11(金) 08:17:27.29ID:PGMEzY6Rという至極真っ当でAppleらしからぬ思想の言語だから
0688デフォルトの名無しさん
2014/07/11(金) 08:17:36.76ID:mjjIchhE>Int型に定義されているdescription()メソッド
description はメソッドじゃなくてプロパティ
>numStr.toInt().description() // エラー
エラーになるのはメソッドとして呼ぼうとしてるからで
numStr.toInt().description // これなら普通におk
>しかし、「.」の前に「?」を置くことでそれが可能になります。
>numStr.toInt()?.description() // Some "134"
だから .description() ってやってる限り無理だっつってんだろ
こいつコード動くか実際に試さず書いてるな
これだからクラスメソッドは信用できないんだ
0689デフォルトの名無しさん
2014/07/11(金) 10:55:34.77ID:Lx3So7Yg0690デフォルトの名無しさん
2014/07/11(金) 11:08:18.34ID:MKluaUW0そのときの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:CNdrj7fpnumStr.toInt()?.description でも
numStr.toInt().description でもコンパイル通るのよ
こんな特殊なものを例に上げたのがまちがい
0692デフォルトの名無しさん
2014/07/11(金) 12:38:41.57ID:jyGo9R2ghttp://stackoverflow.com/questions/24682387
0693デフォルトの名無しさん
2014/07/11(金) 13:13:47.55ID:GkReUTvU?
0694デフォルトの名無しさん
2014/07/11(金) 19:39:36.60ID:jyGo9R2g0695デフォルトの名無しさん
2014/07/11(金) 22:48:06.60ID:izMO91L20696デフォルトの名無しさん
2014/07/12(土) 01:43:26.47ID:pUnCThIkC言語との連携は結構よくできてるわ
0697デフォルトの名無しさん
2014/07/12(土) 02:16:53.71ID:R5OtEg7d0698デフォルトの名無しさん
2014/07/12(土) 02:42:46.74ID:pUnCThIkmmapでバイナリファイル読む例
http://codepad.org/SQH29SHl
0699デフォルトの名無しさん
2014/07/12(土) 06:52:52.22ID:Pi6lV0ruそんな馬鹿なと思ってプロファイラ見たら配列生成の内部ストレージ確保が
めっちゃ時間食ってるみたい
0700デフォルトの名無しさん
2014/07/12(土) 08:44:15.61ID:7baV5ONW0701デフォルトの名無しさん
2014/07/12(土) 13:57:25.38ID:R5OtEg7dhttps://developer.apple.com/swift/blog/
0702デフォルトの名無しさん
2014/07/12(土) 14:17:49.48ID:R5OtEg7dhttp://qiita.com/dankogai/items/052a3ad6f32d114a33fc
0703デフォルトの名無しさん
2014/07/12(土) 19:20:58.04ID:xLJj+FnH0704デフォルトの名無しさん
2014/07/12(土) 19:24:00.64ID:BxmHv/rKアップルはすぐ長ったらしい拡張子つけるよね。xcworkspaceとか。
てか、拡張子って3文字以下じゃないと駄目みたいな決まりなかったっけ?
swfとかでいいのにね。
0705デフォルトの名無しさん
2014/07/12(土) 19:31:52.68ID:xLJj+FnH確かに
.xcodeprojとかもあったな
ところで.swfは釣りっすか?w
0706デフォルトの名無しさん
2014/07/12(土) 19:40:07.02ID:hFyjpWla0707デフォルトの名無しさん
2014/07/12(土) 19:54:39.63ID:6CFefVBC0708デフォルトの名無しさん
2014/07/12(土) 19:56:25.31ID:CDlL/Wk/それはMS-DOSというかその前のCP/Mの制限だな。ファイル名8文字+拡張子3文字。
UNIXなんかは元々ファイルシステム上では単一の文字列でピリオド以降を拡張子として解釈するだけだから特に制限はない。
昔のMacOSだとファイル名と別に4文字までのTYPEが付けられる。
0709デフォルトの名無しさん
2014/07/12(土) 19:58:38.41ID:QxcUStnc■ このスレッドは過去ログ倉庫に格納されています