Swift part3at TECH
Swift part3 - 暇つぶし2ch2:デフォルトの名無しさん
14/07/23 12:01:12.75 rdKtmwhJ
               ノ      ゚.ノヽ  , /}      ...
            ,,イ`"     、-'   `;_' '    ..::::::::::::::...
   ,-、  _.._   (        (,(~ヽ'~     ..:::::::::::::::::::::::
 )'~  レー'  〉   ヽ       i`'}       .:::::::::::::::::::::::
 ~つ     '-ー、  i       | i'     ...:::::::::::::::::::::::
 /       <  /     。/   !  ......:::::::::::::::::::::::::    これは>>1乙じゃなくて
/         ~^´     /},-'' ,●::::::::::::::::::::::::::::::::::::
i、        ,i' _,,...,-‐-、/    i  ::::::::  .:::::::::::::
..ゝ        <,,-==、   ,,-,/      .:::::::::::            放射能がうんたら
 )       {~''~>`v-''`ー゙`'~       ..:::::::::                          ........::.
 {        レ_ノ            ..::::::::.                         ......:::::::::
ノ         ''           ..:::::::                        ...::.:...:::::::::
                     .:::::::::                     ...:......:::::::::::: .
                    .:::::::::::.        .....      ..  ..::::::::::::::::::::::::   :::.
                    ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. ::  ::..
                    .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::    ::.
                    ::::::::::::::::: :::::::::::::::::::::::::::::: :::::
                          .::    ::.  :::

3:デフォルトの名無しさん
14/07/23 12:01:26.09 xa9IqUVv
関連スレ
プログラミング言語Swift
スレリンク(mac板)

4:デフォルトの名無しさん
14/07/23 12:02:42.28 rdKtmwhJ
Swift Blog
URLリンク(developer.apple.com)

Resources
URLリンク(developer.apple.com)
(Xcode 6が無料でダウンロードできる)

Swift Standard Library Reference
URLリンク(developer.apple.com)

5:デフォルトの名無しさん
14/07/23 12:04:02.20 rdKtmwhJ
関連スレ

新言語Swiftを語るスレ
スレリンク(mac板)

Wikipedia
Swift (プログラミング言語)
URLリンク(ja.wikipedia.org)(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)

6:デフォルトの名無しさん
14/07/23 12:12:58.20 xa9IqUVv
>>5 のスレは、>>3のスレの前スレ

7:デフォルトの名無しさん
14/07/23 12:46:53.59 rdKtmwhJ
The Swift Programming Language
URLリンク(itunes.apple.com)

8:デフォルトの名無しさん
14/07/23 13:18:52.66 xa9IqUVv
>>7 >>1 iBooksの本が 7/21改訂版になった。

9:デフォルトの名無しさん
14/07/23 16:58:45.20 x29J8vdY
>>4
そのリンク >>1 に入れてあるから

10:デフォルトの名無しさん
14/07/23 20:23:53.00 UkE72Sh4
>>1 乙wift

11:デフォルトの名無しさん
14/07/23 22:50:27.44 d4fKxbj7
>>8
ibookも差分アップデートしてくれたらいいのに。

12:デフォルトの名無しさん
14/07/26 23:14:33.81 fwCKMr/Y
return って打とうとしたら RETURN が候補に出るのが邪魔だな
なんだ RETURN って

13:デフォルトの名無しさん
14/07/27 02:36:22.52 1WIwg84i
protocol TestProt {
init(_ : Int)
}

class Test0 : TestProt {
init(_: Int) { }
}

class Test {
init() { }

func test<T : TestProt> () -> T {
return T(0)
}

func test2() -> Test0 {
return test<Test0>() // <- Cannot explicitly specialize a generic function
}
}

なぜエラーが出るのか分からない

14:デフォルトの名無しさん
14/07/27 02:50:27.29 1WIwg84i
分かった。<Test0> が要らんのか。
return test() // これで良い

15:デフォルトの名無しさん
14/07/29 00:03:30.46 sbHfEaWW
過疎

16:デフォルトの名無しさん
14/07/29 21:51:07.47 DxcW8iFR
【翻訳】Go言語がダメな理由 | POSTD
 URLリンク(postd.cc)
・Goは何も新しいことをしない。
・Goは全てにおいてうまく設計されているとは言えない。
・Goは他のプログラミング言語から退化したものである。

要するに Google の新言語 Go への批判記事な訳だけど、
これらの視点を Swift にも当てはめてみよう

・汎用プログラミング(Generic Programming)
 良い解決策:制約ベースの汎用プログラミングとパラメータ型多相
 Swift => Haskell 等と同様に、パラメータ型多相による総称プログラミングが可能
 (ただし、この著者は Haskell の型クラスと単なる明示的パラメタ型多相とを
  ごっちゃに理解している可能性があるので、注意が必要と思われる)

・言語拡張性(Language Extensibility)
 良い解決策:演算子は関数である
 Swift => Haskell 等と同様に、演算子をオーバロード(多重定義)したり、
  プログラマがカスタム演算子を定義することすら可能

・基本ケースおよびエラー状態(Base Cases and Failure Conditions)
 良い解決策:代数的データ型と型安全なエラーモード
 Swift => Haskell 等でいう代数的データ型に相当するenum型を提供し、
  しかも独自(?)のOptional型まであるから、
  ヌルポインタのバグにさよならを告げることができる

・型推論(Type Inference)
 良い解決策:一般的な型推論
 Swift => Haskell 等の関数型言語ほど完璧ではないが、実用レベルの型推論を提供

(長いので、一旦ここで切る)

17:デフォルトの名無しさん
14/07/29 22:04:22.69 DxcW8iFR
(>>16 の続き)

・不変性(Immutability)
 良い解決策:デフォルトで不変に設定する
 Swift => すでに ObjC 時代から(NSArray と NSMutableArray のように)デフォは
  不変性であると意識して設計されたライブラリが提供されていたのはもちろんのこと、
  手続きの宣言時に可変性を明示的に mutating で指定する構文も可能になった

・制御フロー構造(Control Flow Structures)
 良い解決策:パターンマッチングと複合式
 Swift => Rust のmatch文と同様、Swift のswitch文では、enum型(代数的データ型)の
  変数代入を伴うパターンマッチや範囲マッチ...etc を提供している

以降は「組み込みプログラミング(Embedded Programming)」における部分的課題

・部分的課題1:ヒープと動的割り当て(The Heap and Dynamic Allocation)
 良い解決策:動的割り当てを選択制にする
 Swift => メモリ制約の厳しい iOS 上では、GC の代わりに ARC が利用できます

・部分的課題2:危険な低級コード(Unsafe Low-Level Code)
 良い解決策:危険なコードの分離
 Swift => C言語の関数を透過的に呼び出すことができるので、
  危険なコードをC言語コードとして分離することが容易(=現実的なコストで実現可能)です

記事と Swift との対比は、これで終わりです
こうしてまとめると、C#/Rust/Go から遅れること数年、満を持して Apple から新登場した
後発の Swift だけあって、いかにも他言語から「いいとこどり」した設計に見えてきます
ただし、それだけ冒険的な挑戦ですから、バグ取りにもしばらくの時間が必要でしょう

18:デフォルトの名無しさん
14/07/29 22:41:34.93 ocgppLb3
今のところサーバサイドをSwiftで書けないのが問題といえば問題かな。
Goの魅力ってそこな気がするので。
OSXがVPSで動いたりしないのかしら

19:デフォルトの名無しさん
14/07/29 23:40:29.86 yYRcHyEO
>>18 動くだろ、VMWareとかで動くんだから。
IBMだってサーバで動かすソフトが多くなるだろうし、何の問題も無いだろ?

ただ、もう少し文字列操作系統を整備して欲しいな。 タイムスケジュールに乗ってると思うが。

20:デフォルトの名無しさん
14/07/30 00:29:00.90 kIm/CoYC
>>19
やっぱいまさらサーバサイドにLinux以外の使うの無理だった。
OSXはクライアントOSとしてしか使う気ないわ・・・。
ということでLinux版希望

21:デフォルトの名無しさん
14/07/30 00:35:17.91 CP3nSahn
了解で~す \(^o^)/

22:デフォルトの名無しさん
14/07/30 09:24:00.96 Nn5HlRg1
SwiftのコンパイラはClangに組み込んだんだから丸ごとオープンソース希望。

23:デフォルトの名無しさん
14/07/30 11:03:58.55 s1QrMkjS
待ってればオープンソース化はされるでしょ

24:デフォルトの名無しさん
14/07/30 11:09:04.86 JrJAkBVK
Linux 版 Swift はかなり期待できるが Linux 版 Cocoa は絶望的。

25:デフォルトの名無しさん
14/07/30 12:33:27.29 UUAxeW7b
SwiftはClangじゃないと何度言ったら

26:デフォルトの名無しさん
14/07/30 12:48:18.10 ddZSmXRh
処理系なんて複数あってもいい

27:デフォルトの名無しさん
14/07/30 15:04:01.42 XjaaJasK
うーん、なら意味ないな

28:デフォルトの名無しさん
14/07/31 11:11:54.32 qwayji1U
今更ながらSwiftが並列処理の構文を持ってないことに気がついた

29:デフォルトの名無しさん
14/07/31 11:25:03.08 u2zE/A7k
>>28 現在 Swift parallel scripting と提携を考えてる最中と妄想。 これで真のSwift languageを名乗れるようになる。
或はIBM PowerPC用にIBMと協議中とか。

並列処理は結構ニーズが有るから慎重でも良い。 既にライブラリは揃ってるわけだし。

30:デフォルトの名無しさん
14/07/31 11:30:10.32 qwayji1U
llvmスレで、次の3.5でOpenMP対応って見て、アレ?って思って見に来たんだ。

31:デフォルトの名無しさん
14/07/31 18:42:52.09 24Rz0y8q
>>28
ライブラリで対応っしょ。
何にしろGCD使うわけだし

32:デフォルトの名無しさん
14/08/03 03:35:04.75 8apJq8+R
gcdの構文はそのまま使えるし、NSThread使ってもいいし、NSOperation使ってもいい
pthread直接は関数ポインタ使うから無理かな

33:デフォルトの名無しさん
14/08/05 18:39:01.56 0W537iyt
URLリンク(i.imgur.com)

34:デフォルトの名無しさん
14/08/05 19:34:08.48 o+/LR7Kj
>>33
小文字のLじゃなくて大文字のiになってるとか?(見やすくするために大文字小文字逆にして書いてます)

35:デフォルトの名無しさん
14/08/05 21:38:06.91 q3/M2RFT
>>34 良く有る事だが、見えない文字が入ってるとか。
一度全部削除して入れ直せば大丈夫だろうが、Fix it したほうが早いね。

36:デフォルトの名無しさん
14/08/06 10:23:13.01 +oVXtDw0
Fix-itダブルクリックしてもなおらんなら、、、

37:デフォルトの名無しさん
14/08/07 11:01:38.76 so7ZCTBn
バージョンがあがる度に糞度が増してるな

38:デフォルトの名無しさん
14/08/08 07:56:57.30 0RLXnAM8
>>32 Cのライブラリは全て直接使えるよ。
関数ポインタだって扱える

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>.

39:デフォルトの名無しさん
14/08/08 14:04:26.83 t4nUvWhz
暗黙型変換は無いけど、リテラルは暗黙的に型変換されるの?

func 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

40:デフォルトの名無しさん
14/08/08 14:14:09.50 FHu5gdbl
リテラルなんだからコンパイル時に判断できるからじゃね

41:デフォルトの名無しさん
14/08/08 14:22:23.37 0RLXnAM8
>>39 そうみたいだね、コンパイラのバグだと思ってた方が良さそうだね 多分型変換しているつもりはないんだろう

42:デフォルトの名無しさん
14/08/08 14:34:06.27 eIB6EleC
f(2.5 + 3.5) // => 5
とか、どこがセーフティなんだって感じだな

43:デフォルトの名無しさん
14/08/08 14:44:54.31 OLXn5oNK
>>41
バグではないでしょ
型変換しているつもりが無いっていうか、型変換などしていない。
>>40の言うとおり、リテラルだからコンパイル時に型が決定しているだけ。
fnの引数の型がIntだから最初からInt型になるだけ。
5.3だからDoubleになってIntに型変換されているんじゃない。最初からInt。
これは関数の引数だけじゃなくて代入でも同じ。
let num : Int = 5.3
と書いてもエラーにならない。Double型の5.3がIntに型変換されて代入されるのではなくて、最初からInt。

44:デフォルトの名無しさん
14/08/08 14:51:28.10 0RLXnAM8
エラーにすべきだろ

45:デフォルトの名無しさん
14/08/08 14:57:27.75 eIB6EleC
そんなことより、Playgroundで、
println("\(1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1)")
がちゃんと動かないんだけど、\()の中って長過ぎるとダメとかあるんだっけ?

46:デフォルトの名無しさん
14/08/08 15:00:48.88 t4nUvWhz
>>43

5 >= 5.3 // true

とかどう考えても嬉しくないんだけど

47:デフォルトの名無しさん
14/08/08 16:49:34.13 eIB6EleC
いや、そんなことより、
println("hogehoge".length)
って書けるのに、

let str = "hogehoge"
println(str.length)
って書けないのはなんで?

48:デフォルトの名無しさん
14/08/08 16:58:51.21 NYRFXe49
えっ

49:デフォルトの名無しさん
14/08/08 17:06:32.25 eIB6EleC
自己解決しました。

50:デフォルトの名無しさん
14/08/09 17:04:50.89 N+zBGm2p
ディクショナリの初期化の仕方はどれでいいんですか?
いろんな書き方があるので迷いまする
var d: Dictionary<String, Int> = [:]
var d: [String: Int] = [:]
var d = [String: Int]()
var d = Dictionary<String, Int>()

51:デフォルトの名無しさん
14/08/09 17:33:00.24 3ND9e6Sl
var d = Dictionary<String, Int>()
しっくりくる

52:デフォルトの名無しさん
14/08/09 17:57:04.42 7nARyUM7
>>50
var 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.

53:デフォルトの名無しさん
14/08/09 18:21:33.99 N+zBGm2p
>>51-52
ありがとございました
アップル推奨の奴でいきまする

54:デフォルトの名無しさん
14/08/09 22:19:51.31 TSdBD6Gl
>>51だとC#と同じになっちゃうから林檎教団的には気に入らないだろうな

55:デフォルトの名無しさん
14/08/09 22:31:53.48 3ND9e6Sl
林檎教団w
C++みたいで、見慣れてるって思った

56:デフォルトの名無しさん
14/08/10 00:24:39.30 y9erLln4
>>54 気に入らんね。 わざわざDictionary なんて無駄の何物でもないし、
教祖様おすすめの新記法を使うべきだろ

57:デフォルトの名無しさん
14/08/10 00:44:53.30 9qr6A6n9
教壇とか信者とか教祖とかどうでもいいんだよ
自分がいちばん良いと思う(あるいは、コーディング規約で定められた)記法を使うだけだ。
自分で書くとしたらvar d = [ String : Int ]()かな。

58:デフォルトの名無しさん
14/08/10 03:53:48.49 9xNLSGsY
Swiftで脱アルゴリズムっすよ。

59:デフォルトの名無しさん
14/08/10 22:20:58.90 ooL2SMwQ
っすよ

60:デフォルトの名無しさん
14/08/10 22:29:20.21 JTN9tFDt
var d[String: Int] = [:]
の方が好きだけど
var d = ["salary": 300000]
のように空で無いときと統一するなら(右辺で型推論するなら)、>>57と同じだなあ

悩ましい

61:デフォルトの名無しさん
14/08/11 04:24:18.04 cC/8Gjcj
>>52 だとしても
var d: [String: Int] = [:]
が推奨されてないわけではない

62:デフォルトの名無しさん
14/08/11 11:14:02.48 HXiuyVVb
推奨は
var namesOfIntegers = [Int: String]()
でイニシャライズして
namesOfIntegers[16] = "sixteen"
と値を入れても
namesOfIntegers = [:]
で再初期化出来る と言う流れ

63:デフォルトの名無しさん
14/08/13 16:59:09.89 xwn08+4R
>>62
なるほど

64:デフォルトの名無しさん
14/08/15 12:28:19.59 HBtdHn8g
StringやIntのhashValueこれでいいのかな

"a".hashValue // 4799450059485595655
"b".hashValue // 4799450059485595656

連続しすぎで簡単に衝突しそう

65:デフォルトの名無しさん
14/08/15 13:09:55.51 W4XUmOz/
連続性と衝突のし易さに関する相関関係について述べよ

66:デフォルトの名無しさん
14/08/15 13:35:15.80 HBtdHn8g
いくつかのハッシュを組み合わせるときに単純にXOR取るだけだと衝突しやすいだろ
あと予測しやすいのでDoS攻撃もしやすい

67:デフォルトの名無しさん
14/08/15 13:44:09.62 HBtdHn8g
struct Person: Hashable {
var 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

68:デフォルトの名無しさん
14/08/15 14:03:31.32 ctFtgwKN
Javaも31のマジックナンバー掛けて足してくだけだったりするしな。
そのハッシュは暗号化の意味は持ってなくてぶつからないように散らすという意味しかないよ。
攻撃されるような、つまりハッシュを外部に見せる場所では使うべきじゃない。

69:デフォルトの名無しさん
14/08/15 14:37:01.87 IEcKMmnc
そうそう。JavaのStringクラスは1文字の場合、charの値がそのままハッシュ値になるし、
整数なら整数値がそのままハッシュ値になるのは、JavaもSwiftも同じ
ただ、ハッシュの計算法については明文化してほしいよなあ。これはObj-Cの時からだけど

70:デフォルトの名無しさん
14/08/15 14:47:41.59 W4XUmOz/
>>67
なんで XORとるの?

var hashValue: Int { return (String(age) + ":" + name).hashValue }

とかじゃダメなの?

71:デフォルトの名無しさん
14/08/15 14:53:58.04 HBtdHn8g
まぁ気に入らなきゃ extension で全て解決やな
お騒がせ

72:デフォルトの名無しさん
14/08/15 14:59:37.87 Lne+Px+X
そうだ
靖国、
逝こう。

73:デフォルトの名無しさん
14/08/15 15:17:20.80 IEcKMmnc
>>70
それだとハッシュ値計算が重くなるよ。
単純な数値計算が望ましいから、Javaみたいにするのが無難

74:デフォルトの名無しさん
14/08/15 15:21:15.99 IEcKMmnc
>>71
いやだから、StringのhashValue変えることに意味無いんだって。
この場合、XORでなく、他の方法でハッシュ値求めればいいだけだよ

75:デフォルトの名無しさん
14/08/15 15:35:30.99 ZaXPBhtE
いつでも重複しにくい推測されにくいような値になる計算をとしたらmdやshaみたいなことになって、
それをインスタンスを作るたびに計算をさせていたらクソ遅いとかw

76:デフォルトの名無しさん
14/08/15 15:47:01.00 HBtdHn8g
>>74
もうSipHash 2-4で実装しなおした

77:デフォルトの名無しさん
14/08/15 16:14:55.16 IEcKMmnc
>>76
などほどHashDoSか
でもSwiftってiOS/OSX向けだからDoS攻撃されることなくね?
あと、スクリプト言語はともかく、Obj-C並みの速度で動作するSwiftへのパフォーマンスの影響はいかほどなんだろう。

78:デフォルトの名無しさん
14/08/16 00:47:57.07 XlNU51V9
extensionは関数のオーバーライドできないんだな。Obj-Cはできていたが

79:デフォルトの名無しさん
14/08/16 08:42:21.65 DXpV4TuM
え?

80:デフォルトの名無しさん
14/08/17 11:21:02.10 NRGjpcdU
これがエラーになるんですがなんでですかね?

var d = ["a": 10, "b": "BBB"]
d["C"] = "123"


ちなみに、こっちはOKでした。

var d:[String: Any]= ["a": 10, "b": "BBB"]
d["C"] = "123"

81:デフォルトの名無しさん
14/08/17 13:19:14.20 V8SXHhEt
無限ループこわい

struct 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


82:デフォルトの名無しさん
14/08/17 13:26:01.14 V8SXHhEt
>>80
上は 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持ってないから使いにくいね

83:デフォルトの名無しさん
14/08/17 13:29:48.59 V8SXHhEt
あ、勘違い
NSMutableDictionary でも subscript 使えたわw

var d = ["a": 1, "b": "2"].mutableCopy() as NSMutableDictionary
d["c"] = 9
println(d)

84:デフォルトの名無しさん
14/08/17 13:31:26.48 V8SXHhEt
あ、mutableCopy() なくてもいけたw

var d = ["a": 1, "b": "2"] as NSMutableDictionary
d["c"] = 9
println(d)

連レススマソ

85:デフォルトの名無しさん
14/08/17 13:37:39.60 Oy9xGDlU
>>84 わざわざそんなことするなら最初からSwift.Dictionary使うよね
型変換のサンプルとしてなら解るが

86:デフォルトの名無しさん
14/08/17 14:03:51.32 K7CnHZGx
>>85
問題は、リテラルで暗黙的にSwift.Dictionary を 作ろうとした時に、typoでFoundation.NSDictionary に なってしまい、さらにその行ではエラーにならない可能性がある、という点だと思います

87:デフォルトの名無しさん
14/08/17 14:31:33.29 6prtFSik
Anyは型類推を使わないようにした方が確実と言うことかな
Typo も多いだろうし

88:デフォルトの名無しさん
14/08/17 14:34:39.04 NRGjpcdU
>>82-84
レス感謝
リテラルだとNSDictionaryになる場合があるんですね
なんか分かりにくいですね。もうちょっとわかりやすい規則性だといいんですが...

89:デフォルトの名無しさん
14/08/17 14:51:16.87 LfZg7/6z
valueがAnyだとNSDictionaryになるみたい。
valueをAnyObjectにするとDictionaryになる。

おそらく、Obj-Cとの互換性のためじゃないかと思う。(NSDictionaryのvalueはAny扱いだろうから)
StackOverflowでも同じ話題が出てる
URLリンク(stackoverflow.com)

90:デフォルトの名無しさん
14/08/17 14:53:42.48 LfZg7/6z
でも、SwiftのDictionaryはvar/letでmutable/immutableだから、この仕様(というか実装)は微妙だなあ

91:デフォルトの名無しさん
14/08/17 15:03:23.86 LfZg7/6z
すまん、NSDictionaryのvalueもAnyObjectだな
連レス失礼

92:デフォルトの名無しさん
14/08/17 15:47:24.27 V8SXHhEt
NSMutableDictionaryは参照型だから別に整合性はある

Anyや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も突っ込める

93:デフォルトの名無しさん
14/08/17 21:19:17.58 QzjnpziE
これが警告もないとは...やっぱり糞言語だな

var i = 10
for i in 1...5 {
println(i)
}
println(i)

94:デフォルトの名無しさん
14/08/17 23:11:23.64 n698S0JW
まあ、そんなことを意図的にする場合は少ないけど、 i とか普通に使っているアホだからすぐに糞いいたたがるのだろなっとw

95:デフォルトの名無しさん
14/08/17 23:23:32.70 GikCLa8j
>>94
無理があるな

96:デフォルトの名無しさん
14/08/17 23:28:28.38 Dhvcldox
>>93
警告がないことがクソな理由がわからん

97:デフォルトの名無しさん
14/08/17 23:33:37.07 LfZg7/6z
>>93
何か問題あるのか?
for文の中でだけiはカウントされているのに?

98:デフォルトの名無しさん
14/08/17 23:34:59.76 QzjnpziE
何故かこっちは期待した動き...やっぱ糞言語だわ

var i = 10
for i=0; i<=5; i++ {
println(i)
}
println(i)

99:デフォルトの名無しさん
14/08/17 23:36:24.94 LfZg7/6z
>>98
var i = 10
for var i=0; i<=5; i++ {
println(i)
}
println(i)

100:デフォルトの名無しさん
14/08/17 23:41:12.49 tBLxxj+B
>>98 なぜかもクソもあるか、ごく自然な文法だろが。 そんな事も解らなければ入門書を10冊読め

101:デフォルトの名無しさん
14/08/17 23:43:25.37 LfZg7/6z
>>98は外部スコープの変数をそのまま参照
>>99は新たに変数を定義している。for-inも同じ
って違い

102:デフォルトの名無しさん
14/08/17 23:50:58.64 QzjnpziE
糞言語すぎてやる気なくなったからもう寝るわ

103:デフォルトの名無しさん
14/08/18 00:11:33.88 En9s5gLv
×糞言語すぎてやる気なくなったからもう寝るわ
○糞理解力すぎて恥ずかしくなったからもう寝るわ

104:デフォルトの名無しさん
14/08/18 02:59:27.51 O5wid4ZY
馬鹿には無理

105:デフォルトの名無しさん
14/08/18 09:45:40.90 AEgSkInF
今んとこはまだマニアのための玩具ってかんじだな
いろいろと粗が目立つ
開発者からのフィードバックも膨大に溜まってんだろ
こなれてくるまでには2,3年はかかるか

106:デフォルトの名無しさん
14/08/18 14:58:59.79 AbutQB81
>>105 1年もあれば落ち着くだろ
ライブラリの整備は多少時間がかかるかもしれないが

107:デフォルトの名無しさん
14/08/18 15:16:48.80 +QBXrcY+
>>101
これcも同じだけど。スコープとか知らんの?

108:デフォルトの名無しさん
14/08/18 15:18:22.93 kU0z26/t
>for i=0; i<=5; i++ {
つうかどうしてアホー言語っていちいち字面をキモくしなきゃ気がすまないんだ

109:デフォルトの名無しさん
14/08/18 15:26:28.48 r8tHn57o
最近の言語は、、、まあいいや

110:デフォルトの名無しさん
14/08/18 15:44:54.29 7O3aXnPz
カッコつけてもええんやでえ。でもそのうち淘汰されてそっちがダサくってな
いわばTPOっていう?w

111:デフォルトの名無しさん
14/08/18 15:50:06.54 AbutQB81
>>108 アホはCも知らないのか?
それが嫌ならこんなのどうだ?好きなの使え

for i in 0...5 {}

112:デフォルトの名無しさん
14/08/18 15:52:47.66 r8tHn57o
... は ..< になったんじゃ?
ってそういやbeta5が出てたな

113:デフォルトの名無しさん
14/08/18 15:53:32.18 IXyCPeCc
var i = 10
for i=0; i<=5; i++ {
println(i)
}
println(i)

これを for in を使って書くとしたら...

114:デフォルトの名無しさん
14/08/18 16:16:23.42 DYjOgIx2
dan kogai...
swiftにコミットするのやめてくれんかのう

115:デフォルトの名無しさん
14/08/18 16:21:49.19 AbutQB81
>>112 a < b の範囲 a .. b が、a ..< b に変わっただけ
a <= b の範囲は a ... b のまま

116:デフォルトの名無しさん
14/08/18 16:43:01.98 nVnuxrx8
>>108
Cのfor文の丸括弧を取っ払っただけだし,C++,C#,Javascriptでも同種の構文があるんだが。
何にも知らないんだね。

117:デフォルトの名無しさん
14/08/18 16:46:35.71 r8tHn57o
あー、はいはいそういうことかありがとう >>115

for文で <= 使うのはかなり特殊なケースだから勘違いしちゃったよ
まあこう書くと反論する人いるだろうからこのへんでー

118:デフォルトの名無しさん
14/08/18 21:16:14.69 jy6904iq
セミコロンとかっこをつけたら、ほぼC構文
ぎゃくに、ちょこまか変えてるのが今はウザい
しかも、つけてもコンパイルとおるって言う
じゃあ何でとったっていう

119:デフォルトの名無しさん
14/08/18 21:19:53.54 WWtz0eQI
そんなにセミコロン書きたいのか?
しばらくSwift書いてObjCに戻ったらセミコロンがもの凄くかったるく感じる

120:デフォルトの名無しさん
14/08/18 21:42:59.44 En9s5gLv
>>118
aaa(); bbb()
こんな風に一行で書くには;がいるわけ
今は省けるもんは省くのがトレンドだからね(型推論にしても)
でも、Swiftは無闇に省いているわけではない。
例えば、ifなどの制御構文のブロックとか、return句とかは必須だ。

121:デフォルトの名無しさん
14/08/18 21:43:56.75 jy6904iq
>>120
そうだ、それがうぜー
全部つければ何も考えなくていいのに

122:デフォルトの名無しさん
14/08/18 21:47:40.83 En9s5gLv
>>121
そのうち慣れて何も考えなくても書けるようになるよ。

123:デフォルトの名無しさん
14/08/18 21:50:27.90 jy6904iq
>>121
ところで、if文ブロックとreturnにセミコロンが必要ってのはどこに書いてあったっけ?

124:デフォルトの名無しさん
14/08/18 21:53:11.65 jy6904iq
鵜呑みにしたおれがアホだった
今リファレンス読んでみたけど、>>120の1行目だけ正しいね

125:デフォルトの名無しさん
14/08/18 21:56:58.04 jy6904iq
結局セミコロンは書かなくてもいい(まあ書きたきゃ書いてもいいけど)って書いてある
一行にまとめて書く場合以外は

126:デフォルトの名無しさん
14/08/18 22:01:50.19 En9s5gLv
>>123
ちゃうちゃう、制御文にブロックが必要ってこと
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必須
//------

セミコロンにしても、締めるところは締めていると言うことを言いたかったんや。

127:デフォルトの名無しさん
14/08/18 22:16:02.11 jy6904iq
>>126
なるほど、そういうことか
全部セミコロンの話かと思ってた
どうもありがとう
にしても、
 if (a.hasPrefix("s"))
 doSomething()
はやりそうだなぁ

Cでも、単文でも極力{ }でくくるようにはしてるけど

128:デフォルトの名無しさん
14/08/18 22:33:45.06 WWtz0eQI
if文はアップル自身が痛いチョンボやらかしてるからな

129:デフォルトの名無しさん
14/08/18 23:24:23.43 TotxymUg
全然関係ない。if文絡みであっただけで、単なるコピペミスだろ
あれ、一目見ておかしいと思わないの? { } でくくっても同じだろ

130:デフォルトの名無しさん
14/08/19 00:02:18.38 dGN2Xh51
あんなのコーディング作法がどうとかいう問題じゃないだろ
あんな重要なとこまともにテストしてないのがおかしい

131:デフォルトの名無しさん
14/08/19 13:57:12.16 c6AsXCDx
「これは間違いなく普及する」小飼弾、Swift愛を語る
URLリンク(news.livedoor.com)

「2014年前半のインパクトはもう圧倒的にSwiftの登場。これは間違いなく普及する」と小飼氏が断言する理由は、次の5つに集約されるそうだ。

【1】既存環境の言語との高い互換性
【2】他の言語の“負の遺産”を捨てている
【3】優れたリファレンス
【4】iOSエンジニアをアセンブラ領域まで進出させる可能性
【5】クローズドから始めてオープンへというAppleの戦略意図を感じる

132:デフォルトの名無しさん
14/08/19 14:08:21.75 sBhGF3j6
小飼が絶賛したPerl6はほとんど普及してないわけだが

133:デフォルトの名無しさん
14/08/19 14:28:29.94 c6AsXCDx
>>132 それはPerlオタクだから仕方ないだろ そのオタクが他の言語に目移りしたと言う事は注目に値する

134:デフォルトの名無しさん
14/08/19 15:16:25.26 0B3vcACg
dankogaiのコードってゴミコードしか見たことないんだけど、なんかすばらしいコードでも書いてるのか?

135:デフォルトの名無しさん
14/08/19 15:25:47.81 sBhGF3j6
そんなことより、貴殿の宝石の様に煌めく素晴らしいコードをぜひとも拝ませて欲しいです。

136:デフォルトの名無しさん
14/08/19 15:38:00.06 0B3vcACg
>>135
俺の書くコードの質と、dankogaiが書くコードには何の関係もないよ。

以前
URLリンク(blog.livedoor.jp)
で偉そうなこと書いてその後こてんぱんにやられてたが、少なくとも404 Blog Not Foundに書かれるコードは糞コードだらけだ。

137:デフォルトの名無しさん
14/08/19 15:57:36.88 sBhGF3j6
>>136
どこがどういう理由で糞なのか参考までに教えて頂けると助かります。

138:デフォルトの名無しさん
14/08/19 16:00:56.56 muSpSvbP
>>136
下までスクロールするとブラウザがフリーズした

139:デフォルトの名無しさん
14/08/19 16:13:13.66 lLkg1CgN
>>136 何年前の記事を張ってるんだよ
404で見たこと無い。 Swift のコードはほとんどQiitaだろ
最近Swiftばかり

140:デフォルトの名無しさん
14/08/19 16:19:24.69 lLkg1CgN
そんな事より Beta6が出てるぞ

141:デフォルトの名無しさん
14/08/19 16:24:34.18 0B3vcACg
>>139
何年前って2012年の記事だろ。

> Swift のコードはほとんどQiitaだろ
あ、そうなの?dankogaiのまともなコードがあるならリンクよろしく。まあないと思うけどな。

142:デフォルトの名無しさん
14/08/19 16:27:25.14 sBhGF3j6
もしかして小飼に昔叩かれた人とか?

143:デフォルトの名無しさん
14/08/19 16:33:02.29 0B3vcACg
別にdankogai本人とはかすったこともないが、なんでこいつが偉そうなこと言えるのかそれが知りたいだけ。
なんかPerlの貢献度が高かったらしいのは知ってるが。

144:デフォルトの名無しさん
14/08/19 16:39:53.20 sBhGF3j6
まぁ、実力も実績もあるし、信者も大勢いるし、アルファブロガーだし
ゲームは作ってないけど

145:デフォルトの名無しさん
14/08/19 16:58:08.56 lLkg1CgN
>>141 ソフトの世界で2年も前の話なんてカビが生えてるよ
Swiftが出たのは6月だぞ

Qiitaも見たこと無いでコードの話をするなんて変なの 最も纏まったコードは無いけど
リンクも何もQiita Swift dankogai で検索すれば沢山出てくるから自分で見ろよ

146:デフォルトの名無しさん
14/08/19 19:08:01.93 b1cKAETJ
>>145
場合によりけり。こと言語関連に限っては2年はそう昔の話ではないだろう
単に流行だけを追いかけてるだけなら 2年も前の話なんてカビが生えて かもしれないがな

147:デフォルトの名無しさん
14/08/19 19:09:17.26 TLaA01XG
※ここはSwiftスレです

148:デフォルトの名無しさん
14/08/19 20:08:11.95 V8/7iNdr
これ以上品質ネタで引っ張るなら
Patch pleaseでいいんじゃね。
swiftスレらしくswiftのコードに粘着してくれ。

149:デフォルトの名無しさん
14/08/19 21:19:55.30 c6AsXCDx
>>146 小飼自体が404にはほとんど書き込まず技術的な事は最近はQiitaだろ
6月以降だけを見ても404の方は数本、Qiitaの方はSwiftだけでも沢山書き込んでる
404は四方山話、コードならQiita
そんな404の古い四方山話を持ち出しても意味無いだろ Perlがもはや坂を転げ落ちてることは本人が良く知ってるだろう

SwiftでJSONとか参考になったよ
コードに文句つけるならSwiftのコードについて意見しろよ

150:デフォルトの名無しさん
14/08/19 21:49:44.49 aN7BQ+Qx
じゃあコードにケチつけようか
URLリンク(qiita.com)
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)

151:デフォルトの名無しさん
14/08/19 21:56:15.35 FQGd2orm
ここまでのまとめ

小飼弾ばっかり注目されて悔しいニダ
実名で有益なことやってる奴見ると腹立つニダ

152:デフォルトの名無しさん
14/08/19 22:09:32.82 b1cKAETJ
白黒012値で判断するのはかなわんなw簡単だからアレな人にはそれしかなんだろうけどw

153:デフォルトの名無しさん
14/08/19 22:20:56.13 dii/unFm
beta 6 が出たらしいから、swift本体にケチつけようぜ
また色々言語仕様変更したらしいじゃねーか

154:デフォルトの名無しさん
14/08/19 22:25:06.20 RLzZhY/k
>>153
今回はあんま変更ないじゃん。細かい改良がメインだし
Xcodeでリンクが上手く行かないって問題がなんぼか出ているようだが

155:デフォルトの名無しさん
14/08/19 22:32:15.29 Laa9BX+V
>>150
いや、話の趣旨が、C言語の素のデータ型とSwiftとの連携の話なんで
そこは、withCStringでいいでしょ
その後の、withUnsafePointer にも繋がってくわけだし

156:デフォルトの名無しさん
14/08/19 23:43:35.67 I0aXY+SD
いくらなんでも嫉妬に狂いすぎだ

157:デフォルトの名無しさん
14/08/20 00:56:55.99 9QzdPeJo
粘着も信者もキモ過ぎ

158:デフォルトの名無しさん
14/08/20 00:59:22.66 +uPYMsWL
>>150 その下の可変長バッファ、、、
の *3 の下の
while fgets(&linebuf, Int32(linebufsize-1), fp) {

ここでエラーが出るようになったけど何が変わったんだっけ?

159:デフォルトの名無しさん
14/08/20 08:51:55.37 Nj3MsvBs
エラーメッセージ読めばわかるだろうに

160:デフォルトの名無しさん
14/08/20 10:09:10.39 +uPYMsWL
>>159 ごめん、わかった
type 'UnsafeMutablePointer<Int8>' does not conform to protocol 'BooleanType'
fgetsのreturnが  char * でBooleanじゃないよと言ってるんだね

161:デフォルトの名無しさん
14/08/20 10:27:10.15 xEVixHuY
>>149
> SwiftでJSONとか参考になったよ
え、あのコードで参考になっちゃうんだ

162:デフォルトの名無しさん
14/08/20 10:40:51.47 3XEuOnAA
>>161
なるよ

163:デフォルトの名無しさん
14/08/20 10:51:38.06 +uPYMsWL
>>161 これだよ
Swiftで面倒なJSONの取り扱いをさらに10倍便利にするclass JSON
URLリンク(qiita.com)

164:デフォルトの名無しさん
14/08/20 11:27:17.95 Nj3MsvBs
これは参考になるな

165:デフォルトの名無しさん
14/08/20 12:32:27.86 +uPYMsWL
>>158 beta5での変更にあったね
“Optionals no longer implicitly evaluate to true when they have a value and false when they do not, to avoid confusion when working with optional Bool values.
Instead, make an explicit check against nil with the == or != operators to find out if an optional contains a value.”

166:デフォルトの名無しさん
14/08/20 12:47:51.13 IR8yJSUh
>>165
関係無い
fgets の戻り値は UnsafeMutablePointer<Int8>
UnsafeMutablePointer が BooleanType じゃなくなったのは Beta 6 から

167:デフォルトの名無しさん
14/08/20 12:52:10.49 IR8yJSUh
あ、違った
Beta 6 から BooleanType じゃなくなったのは AutoreleasingUnsafeMutablePointer の方だった
UnsafeMutablePointer は Beta 4 までは UnsafePointer で LogicValue プロトコルを実装してたが、
Beta 5 で UnsafeMutablePointer に名前が変更されると同時に BooleanType (Beta 4 以前での LogicValue) じゃなくなった


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch