X



Swift part11 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 2b11-WRiT)
垢版 |
2017/06/28(水) 17:58:29.74ID:KUDOoNV30
WWDC2014で発表されたAppleの新言語Swiftについて語りましょう

関連スレ

プログラミング言語Swift Part4
http://egg.2ch.net/test/read.cgi/mac/1484763495/

[SDK]iPhoneアプリ開発初心者質問箱48[touch][iPad]
http://egg.2ch.net/test/read.cgi/mac/1484217623/

Xcode part14
http://egg.2ch.net/test/read.cgi/mac/1476190499/

Swiftアンチスレ part1
http://mevius.2ch.net/test/read.cgi/tech/1458491343/


前スレ
Swift part10
http://mevius.2ch.net/test/read.cgi/tech/1487552413/

スレ立て時は1行目に「!extend::vvvvv」
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0153デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/24(月) 10:27:01.25ID:mOlqqWbM0
>>151
俺には「つ」が手に見えない。手のひら?手の甲?
0154デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/24(月) 10:29:33.52ID:mOlqqWbM0
>>152
オブジェクトへの参照が1個、複数の別で、
unique_ptr, shared_ptrを使い分ける。

参照するだけで、所有しないweak_ptrってのもある。

要するにリファレンス・カウント式のメモリ管理なのだ。
Objective-Cの設計をC++が取り入れたのかな?
0155デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/24(月) 10:30:53.63ID:mOlqqWbM0
ちなみに、俺はC++を最近全然使ってない。C++詳しい人、
unique_ptr, shared_ptr, weak_ptr
の解説、よろしこ!
0157デフォルトの名無しさん (ワッチョイ 6717-M4aJ)
垢版 |
2017/07/24(月) 10:49:27.16ID:d8RjP+270
逆だよ、C++のshared_ptrをObjCのARCに文法糖衣で取り込んだんだよ

>>152
unique_ptrは元々C++ boostのライブラリとして提供してたから出来るでしょ
ObjCもSwiftもそういう機能はライブラリじゃなく文法で取り込みたがるから言語更新待ちになるだけで
0158デフォルトの名無しさん (フリッテル MM4f-bWGY)
垢版 |
2017/07/24(月) 10:49:41.82ID:1TXRI9GxM
リファレンスカウントは全然静的に解決しているメモリ管理機構じゃない。
rustのやり方はコンパイル時に指摘してくれるけど、リファレンスカウントはけっきょく動的に解決するわけだし。
それならとっくにswiftで実現してるし。ARCだろ。
0159デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/24(月) 11:07:27.25ID:mOlqqWbM0
>>157
Boost Software License - Version 1.0 - August 17th, 2003

って事は、Boostの方が歴史が古そうですなぁ。ObjCよりも。
俺、誤解してたわぁ。
0160デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/24(月) 11:11:24.98ID:mOlqqWbM0
Apple Inc. deploys ARC in their operating systems, such as macOS (OS X) and iOS.
Limited support (ARCLite)[5] has been available since Mac OS X Snow Leopard and iOS 4,

with complete support following in Mac OS X Lion and iOS 5.[6] Garbage collection was declared deprecated in OS X Mountain Lion,

in favor of ARC, and removed from the Objective-C runtime library in macOS Sierra.[7][8]

ref. en.Wikipedia://ARC
ARC Liteの出現は、2009, Snow Leopardからみたい。
0161デフォルトの名無しさん (フリッテル MM4f-bWGY)
垢版 |
2017/07/24(月) 12:00:46.09ID:1TXRI9GxM
rustのメモリ管理の仕組みを見てきたけどプリプロセッサで何とかなるというものじゃなかったから、
c++ならあると言うものじゃなかった。
言語仕様から改変か必要なものだったよ。

簡単に言えば、メモリの参照は一箇所に制限されて、そこからしかアクセスできないようにする。

たから、もしswiftでrustのメモリ管理機構が導入されたら、
100%既存のコードでは動かないし単純に変換もできない。
ロジックの見直しが必要だからね。

例えば配列にループアクセス中は
配列に対する変更操作はすべてコンパイルエラーになる。とか。
0164デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/24(月) 15:17:51.01ID:mOlqqWbM0
>>161
「メモリの参照は一箇所」
まあ、そうかもしれんけど、俺の理解では参照カウントを1以上に上げない
様なメモリ管理ポリシーを実践する事で、メモリリークは防げると思う。

それから、Instrumentsとdebuggerを活用するのが吉。
最近気がついたのが、command+IでInstruments leaksを起動して捕捉出来なかったメモリリークが、不思議な事に、break pointで一旦止めてdebuggerからInstruments leaksを起動すると捕捉できるんだよねぇ。
0169デフォルトの名無しさん (ワッチョイ e711-ea0C)
垢版 |
2017/07/24(月) 23:24:01.06ID:J5SFZDQ/0
>>153
手の平。
https://nanapi.com/ja/25657

https://m.chiebukuro.yahoo.co.jp/detail/q1410591729?__ysp=MmNoIOOBpA%3D%3D
[つ]は手を表現しています。

例えば、[( ・∀・)つ旦]というAAでしたら
旦はお茶のAAですので、
お茶をハイ、と差し出している様子を表しています。
2ちゃんねるでは省略形をよく用いますので
顔文字が省略されて[つ]のみで使用されます。

>>165
まじっす!
0170デフォルトの名無しさん (ワッチョイ 6797-cAwC)
垢版 |
2017/07/25(火) 00:35:48.08ID:pCPhayDn0
つ⌒□

馬券、車券、くじ券をすてている
0171デフォルトの名無しさん (ワッチョイ 476c-d1J2)
垢版 |
2017/07/25(火) 11:28:49.52ID:uSdVU4/I0
>>170

そんな、補足説明が必要なAAなんて、不要だわぁ。
0173デフォルトの名無しさん (ワッチョイ 2748-dkZs)
垢版 |
2017/07/25(火) 18:36:52.92ID:MoMVyAkE0
>>135
つまりは皆が出来ないうちに自分だけはSwiftを沢山書けるようになっておけば、Swiftがゴリ押しされたときに先行者利益を得られると思ったけどそうはならなかったから悲しいってことだろ?
別にAppleが推してないなんてことないと思うし、Obj-Cを崇めてる奴なんていないと思うし、Swiftはまだまだバージョンごとに変更がある割には十分普及してると思うけどな

大体Swiftをちょっと書かないと作れないぐらいのレベルだったら大してSwiftの知識もいらないと思うし銭稼ぎできるようなもんでもないと思うんだけどな
はじめにObj-C使わなきゃいけなくなったときに本1,2冊ぐらいしか買ってないし、Swiftに関してはお金まったく書けてないし、金稼ぎできる要素がある気がしない

>>138
C++をブリッジするとなるとC++の複雑な機能全てをブリッジ出来なきゃ有用性が落ちそう
限定された機能で書かれたC++コードだけブリッジしてくれるとかだと結局C++側がそれ以外の機能使ってたらラッパー書かなきゃいけなくなるし、落とし所が難しそう
0175デフォルトの名無しさん (ワッチョイ e711-E/h9)
垢版 |
2017/07/25(火) 22:11:09.32ID:GZGsW4rL0
C++ブリッジってそれもうwith C++だからな
テンプレート除けばそれなりに出来るだろうけど
テンプレート除いたC++に対応したところでだから何なのって話になるし
0183デフォルトの名無しさん (ワッチョイ df0d-wITz)
垢版 |
2017/07/26(水) 16:59:40.71ID:2aPuu4440
むしろ、Objective-Cの「インスタンスは母体クラスに[おまえのインスタンスを作れ]命令で作成します」とか
「クラス間の通信はクラス[命令:引数]で明示的に他のクラスに実行させてるとわかります」が好きだったので
そのあたりswiftが「退化」しちゃったのが嫌。

言語仕様とクラス仕様が分離しててクラスライブラリだけ進歩してくとか
ソース内で自他の表記がしっかり別れてて「ここであいつがこれやって次…」
と読めるのが気に入ってたのに
他のグチャグチャモダン言語と同じ言語仕様変更地獄と
ソースになんだかわからない誰かが作った記号が普通に混じりますって
これ、ずっとプログラミング文化の発展阻害してた奴だ…と
0186デフォルトの名無しさん (ワッチョイ df6c-HXaS)
垢版 |
2017/07/26(水) 17:17:39.81ID:X3I7XP0c0
>>183
>ソース内で自他の表記がしっかり別れてて

これ何のことを言ってんの?
自他の区別がつかない言語なんてあんの?
そんな精神病みたいなプログラムあっても実行できなくね
0189デフォルトの名無しさん (ワッチョイ 27ed-M4aJ)
垢版 |
2017/07/26(水) 19:22:50.49ID:0VRUk0dC0
一方俺は、ObjCの言語仕様にクラス変数が追加されて、既存フレームワークのクラスメソッドがクラス変数に変わって発狂していた

>>188
$0, $1, etc.として複数引数の場合でも引数記述を省略させるためでしょ
シェルスクリプトを書いたことないとなんぞこれってなるが、it0, it1よりはスマートだと思うが
0192デフォルトの名無しさん (ワッチョイ 7fe3-E/h9)
垢版 |
2017/07/26(水) 19:44:28.65ID:Q9Wh0Ukp0
>>189
いちいち引数に名前つけさせて、
省略できるのはひとつまでって感じで今まできてたじゃん!

ここにきてこれ
itですら多少は意味があるが、$ってなに?
なんで急にドル記号が出てくんの
0194デフォルトの名無しさん (ワッチョイ df6c-HXaS)
垢版 |
2017/07/26(水) 21:11:05.37ID:X3I7XP0c0
俺はitより$nの方がマシだと思うけどね

「名前を省略する」ためのものに「名前をつけた気になる」ために$nをやめてitにするってかなり本末転倒じゃない
どうせ具体的な名前が無いなら、極めて曖昧なitなんて単語じゃなく、どこまでも記号的な$nでいい
敢えて単語にするならanonymousArgumentとかclosureArgumentとかにして、クロージャの名前がない引数であるという意味を表さないと
itなんて、$nと同じぐらい何も意味を表さないのに、無駄に単語の体をしてるだけタチ悪いと思うわ

逆にwillSetの引数名省略時のnewValueみたいに、最低限あらかじめ意味が限定されてるところでは、$nでもitでもなくちゃんと最低限の意味を表す省略形になってる
0199デフォルトの名無しさん (ワッチョイ afa9-8N1R)
垢版 |
2017/07/27(木) 00:19:52.29ID:YcR0VV5Q0
swiftでrxSwiftさわったらすごくRxがわかりやすくなったのは良い思い出。
objcだとわけわかめだった。
構文って結構学習コストに関わるんだなって理解した瞬間でした。
0202デフォルトの名無しさん (ワッチョイ 7b32-VhqT)
垢版 |
2017/07/27(木) 10:53:29.63ID:ck0CL7KM0
objCは文法に多様性がありすぎて俺には理解できなかった
0204デフォルトの名無しさん (ワッチョイ 0f7e-XfY8)
垢版 |
2017/07/27(木) 19:22:06.60ID:uqnl2xme0
>>199
ObjCにはCocoa Bindingがある。
0209デフォルトの名無しさん (ブーイモ MM8a-V675)
垢版 |
2017/07/29(土) 13:02:57.19ID:arVZp8ApM
レベルに合わせた書き方すりゃいいじゃんよ
generics,typealias,operator overload この辺は無理して使うことない
boilerplate無くしてえなーもっとコードを直感的に書きてえなー、そもそも今までの書き方飽きたから違った書き方してえなー
という欲求が生まれた時に導入すれば良い。そうすりゃObjCとも大して見た目変わらんしな
0210デフォルトの名無しさん (ワッチョイ 0f7e-XfY8)
垢版 |
2017/07/29(土) 17:08:58.83ID:wplyINA+0
>>209
なるほどぉ。
ところで、Swift -> ObjCへ移行する時に、RxSwift相当のFramework
って、ReactiveCocoaって事になるのかなぁ?
0212デフォルトの名無しさん (ワッチョイ 9fa9-fAXk)
垢版 |
2017/08/06(日) 17:25:37.14ID:exhLY8Mw0
>>210
言っておくけど、Rxとobjcは全く相性が悪い。
なんでかというとあのobjcのメッセージ式
Rxってメソッドチェーンが無いとかなり実装しづらいのに
objcでは書けないのだよ。
[]のネスト地獄を味わう事になる
0214デフォルトの名無しさん (ワッチョイ 4b7e-LqqZ)
垢版 |
2017/08/06(日) 17:37:55.69ID:A+R4LQxw0
>>212
なるほどぉ
Cocoa BindingとかCore Dataを使えって事なのね。
ところで、ObjC Wizardの方々は、Core Data使うんでしょうかねぇ?
0218デフォルトの名無しさん (ワッチョイ 056c-cJAr)
垢版 |
2017/08/07(月) 09:36:54.43ID:tO02o/C10
>>212
メソッド呼び出しに、ドット構文が使えればObjCも描きやすくなるよねぇ。
Objective-C 3.0に期待だね。

id a = [[NSObject alloc] init];
->id a = NSObject.alloc().init(); // こんな感じ!
0219デフォルトの名無しさん (ワッチョイ d9c0-mS7C)
垢版 |
2017/08/07(月) 10:15:21.88ID:0r/N/mwc0
既にクラスプロパティとオブジェクトプロパティで実現できてるね!ObjCはすごいね!
クラスプロパティの存在を知らないんだろうなぁ、ObjCについてもうちょっと勉強してこい
0221デフォルトの名無しさん (ワッチョイ d9b5-xdmZ)
垢版 |
2017/08/07(月) 12:05:53.21ID:tDzZ+7xU0
>>218
obj-cの魅力ってあくまでcの拡張でありobj-cの世界は[]の中だけってスタンスであってほしいから
ドット構文?はあんまり増やしてほしくない
個人的にはElixrのパイプ演算子(|>)をobj-cに採用して欲しい。
(元ネタはElixirじゃないかもしれないけど。)

[NSObject alloc] |> [@ init]
みたいな感じで使う。Elixirの場合だと返却値を次のメソッドの第一引数に渡すって意味だけどobj-cでは@を置き換えるみたいな感じで
0225デフォルトの名無しさん (ワッチョイ 27e5-j5Xk)
垢版 |
2017/08/07(月) 23:19:41.66ID:+algoHcf0
最近ObjC ageが激しいがnukeとかvaporとか読んで腰が引けちゃった連中が多いのかな?
ああこれc++の再発明かなと思うくらい難解なコードになってきたからな
POPがあるからまだ扱いやすいが
0228デフォルトの名無しさん (ワッチョイ 2b0d-adf2)
垢版 |
2017/08/09(水) 13:10:58.09ID:a8XvE3390
Objective-Cがまぁ長年主に言語仕様を弄るんじゃなくて
外部のクラスライブラリ更新で"外"に括り出してきたタイプの問題を
2010年代になっていまさら言語仕様直接変更の繰り返しで泥沼って
そりゃ車輪の再発明ってレベルじゃねーぞっつか…
あきらかに(筋の悪い)車輪を知らないところからの使者が
「おまえら未開の蛮族にまったく新しい言語を作ってやるぜ」って
泥の中でのたうってるのを眺めてるこの感じ。
0229デフォルトの名無しさん (ササクッテロリ Spa9-mS7C)
垢版 |
2017/08/09(水) 14:43:22.78ID:7tAKIt6Pp
ObjCが長年プロパティ、GC/ARC, ブロック文, nillable, ジェネリクスと言語仕様追加を繰り返して泥沼を作ってる中で
Swiftという新しい泥沼を作ってくれたから皆で泥遊びをしている中、泥遊びって子供かよ・・・と高二病な感じ
一緒に泥遊びしようぜ、やってみたら案外楽しいよ
0230デフォルトの名無しさん (ワッチョイ 056c-cJAr)
垢版 |
2017/08/09(水) 14:56:18.93ID:ocU/hJiZ0
>>229
Objective-Cでもジェネリクス可能なのか?

どのレベルまでできる?
1. 型汎用な関数
2. 型汎用なクラス
3. 型汎用なプロトコル
4. 型汎用なプロトコル・エクステンション
0239デフォルトの名無しさん (ワッチョイ 136c-HoSW)
垢版 |
2017/08/19(土) 04:02:37.38ID:H/3D3Ri60
Swift 5のゴールの一つに設定された非同期実行の構文の議論がevolutionメーリスで始まってる

・kicking off concurrency discussions by Ted Kremenek
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170814/038891.html
・async/await + actors by Chris Lattner
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20170814/038892.html
・Concurrency in Swift: One possible approach by Chris Lattner
https://gist.github.com/lattner/31ed37682ef1576b16bca1432ea9f782
0240デフォルトの名無しさん (ササクッテロラ Sp4d-rUtp)
垢版 |
2017/08/19(土) 12:28:05.32ID:yjxWeDHXp
どうせまたリスケするんでしょ、、、とか思ってるけど
それとは別にラットナー のgist記事がRustのオーナーシップモデルをディスっててワロタ
Rustライクなメモリ管理をSwift4で投入するって言って結局Swift5に持ち越したのは忘れんぞ

ファーストクラスの非同期とファーストクラスのオーナーシップモデルを並走させるのはキッツイだろうがどうするんだろうね
理論的には出来なかないだろうが時間も技術力も足りずどっちかSwift6に持ち越しすることになるんじゃねーのか
0241デフォルトの名無しさん (ワッチョイ 136c-ysxe)
垢版 |
2017/08/19(土) 12:40:33.92ID:H/3D3Ri60
オーナーシップは初めから「4には入れられないけど」「将来的に〜」ってエクスキューズしてた
オーナーシップを4のゴールに含めるなんて話は一度も出てないはずだが
0242デフォルトの名無しさん (ワッチョイ 59a9-KV95)
垢版 |
2017/08/19(土) 18:39:02.10ID:a8QxREVh0
思うんだけどrustのオーナーシップモデルって後付で入れられるものなの?
rustを見る限り無理そうだし、
スマホの性能もこれから上がっていく一方なのに学習コストが上がる
メモリオーナシップモデルって導入する意味あるのん?
0245デフォルトの名無しさん (ワッチョイ 196c-2J29)
垢版 |
2017/08/21(月) 16:47:08.07ID:/ym3MI5Q0
>>244
詳しく
0246デフォルトの名無しさん (ワッチョイ 7997-Z4cy)
垢版 |
2017/08/21(月) 17:20:19.06ID:mGn9ABqu0
>>245
CManeger.mmの関係しそうなところ
@property (nonatomic, readwrite) NSArray *hoge;
データ取得関数の最後に
self.hoge = hoge.array;
dispatch_async(dispatch_get_main_queue(), ^{
[self.delegate CManager:self didCompleteWithCandidates:self.hoge];
});
とあり、ブレークポイントはって確認すると、取得したデータがhogeにある。

HOGE-Bridging-Header.h
#import "CManager.h"

Hoge.swift
let objcCMng = CManager()
let ret = objvCMng.hoge
print(ret)

出力データは
Optinal([<CCandidate: 0x170226b80> , <CCandidate: 0x170226ce0>)]
という感じになります。
ただし、デバックエリアで確認するとself>objcCMng>_hoge>_orderedSet>_array>[x]>_hogeに取得データがあることは確認できます。
型変換か何か必要なのでしょうか?
0247デフォルトの名無しさん (ワッチョイ 096f-uL9b)
垢版 |
2017/08/22(火) 07:28:48.92ID:yXinq9w70
>>246
let ret = objvCMng.hogeを
let ret:Array! = objvCMng.hoge
にしてみたら?
0250デフォルトの名無しさん (ワッチョイ 136c-HoSW)
垢版 |
2017/08/22(火) 12:26:03.39ID:t4xHLqmy0
多分descriptionをオーバーライドしてなくてprintで<CCandidate: 0x170226b80>みたいに出力されるのと、型変換してなくて[AnyObject]?型のままになってるのの複合で混乱してるんだろう

前者はCCandidateのdescriptionを自分の望みどおりの出力をするようにオーバーライドすればいい
後者はSwift側で as? [CCandidate] するか、Obj-C側で @property (nonnull, nonatomic, copy) NSArray<__kindof CCandidate *> *hoge; とかすればいい
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況