Swift part9 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 8b3c-/6Y/)
2016/10/18(火) 11:34:44.16ID:oLo879ze0関連スレ
プログラミング言語Swift 3
http://potato.2ch.net/test/read.cgi/mac/1408762479/
[SDK]iPhoneアプリ開発初心者質問箱47[touch][iPad]
http://potato.2ch.net/test/read.cgi/mac/1470902093/
Xcode part14
http://potato.2ch.net/test/read.cgi/mac/1476190499/
Swiftアンチスレ part1
http://echo.2ch.net/test/read.cgi/tech/1458491343/
前スレ
Swift part8
http://echo.2ch.net/test/read.cgi/tech/1463149806/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0404デフォルトの名無しさん (ブーイモ MMff-S2pU)
2017/01/05(木) 17:18:55.89ID:oFOZ2y/SM0405デフォルトの名無しさん (ワッチョイ dfc9-f1yY)
2017/01/05(木) 17:32:58.79ID:sWdRcuvD00406デフォルトの名無しさん (スップ Sdff-oQtP)
2017/01/05(木) 18:22:18.82ID:YNtiq33Odほんとこれ
0407デフォルトの名無しさん (ブーイモ MM3f-twlg)
2017/01/05(木) 20:45:21.20ID:P+GiqLXdM0408デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)
2017/01/05(木) 20:47:15.64ID:zjhRqjNopそれはそれとして、 swiftがヤならobjcでいいじゃん、、、
どっちもイヤならアポー端末を諦めろというね
0409デフォルトの名無しさん (ワッチョイ 0f42-HvS5)
2017/01/05(木) 21:15:32.68ID:P4uSEloo00410デフォルトの名無しさん (ワッチョイ 0fba-oQtP)
2017/01/05(木) 21:58:08.24ID:jBQh1CN000411デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)
2017/01/06(金) 00:00:22.89ID:bcUwFgd80初めて学ぶ言語ならObj-Cの方がCの勉強にもなるからSwiftより断然まし
SwiftはObj-C以上に排他的変態的シンタックスだから初学者には
やっぱり個人的にはお勧めできないわ
0412デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/06(金) 00:22:09.68ID:Y1Cw0qRA0そんな特殊だと感じることはないんだが
Objective-Cに比べると格段にタイプ量が減って見た目もスッキリするから
個人的にはそれだけでも大きなメリット
0413デフォルトの名無しさん (ワッチョイ 1b66-SevC)
2017/01/06(金) 00:28:39.65ID:BpurgW/q0職業プログラマ特有のこの価値観がもうゲロ出るぐらい嫌い
0414デフォルトの名無しさん (ワッチョイ dfc9-f1yY)
2017/01/06(金) 00:33:12.22ID:PzH0fr810プログラマとして勉強不足なのバレバレだぞ
0415デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/06(金) 00:33:15.56ID:Y1Cw0qRA0タイプはXcodeが補完してくれるから実質的にはそこまでの違いはないかもしれないんだが
文字を読む量が違うんだよ でそれはバグの量に直結するかんね
0416デフォルトの名無しさん (ワッチョイ 1b66-SevC)
2017/01/06(金) 00:50:24.79ID:BpurgW/q0はぁ。
あなたは一生work1にwork2から変数A1を代入してこれでバグが少ない!とほざいててください。それでいいよ
0417デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/06(金) 01:05:43.98ID:/fM3tdtK0関数型言語界隈からの価値観というか流れでは
0418デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/06(金) 01:57:40.55ID:Y1Cw0qRA0読む量が減ればバグが減るって言ってるのに増やしてどうすんねんw
0419デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/06(金) 01:58:56.36ID:Y1Cw0qRA0今でも普通に使われてる言葉なの?
0420デフォルトの名無しさん (ワッチョイ dfc9-6vgr)
2017/01/06(金) 02:18:34.24ID:EL7IyQQ80同意
0421デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/06(金) 07:52:01.44ID:Q/mvZ92R0>>390
お前良い奴だな
なかなかいい学習ノウハウだ
おれRuby勉強した時は良質なxx写真がアップされているスレを解析して
スレ内のURLから写真を片っ端からダウンロードするプログラムを書いたな
そう言えば大学院の先輩に英語の速読できるようになりたいと聞いた時の回答は「Hな本読むといいです」だった
つまりエロ最強!
0422デフォルトの名無しさん (スプッッ Sdff-B9xl)
2017/01/06(金) 12:21:21.27ID:RUdDycfgdそう、冗長だと見通しが悪すぎる。
半分はライブラリ設計のせいで、残りはc言語のせいの気もするけど。
0423デフォルトの名無しさん (ワッチョイ bb10-51vH)
2017/01/06(金) 19:38:50.74ID:Gq0Nc1/d0同等のJavaのコードに比べて、単に配列から値を取り出してるだけの行も複雑な命令を実行してる行も同等に横いっぱいになるから飛ばし読みがしづらくてしっかり読む必要があった。
わけのわからない変数名や関数名をつけて短くていいよねみたいな話ではないよ。BASICとかの時代じゃないんだからさぁ。
0424デフォルトの名無しさん (ワッチョイ 2b0c-tEgc)
2017/01/07(土) 00:28:19.84ID:DNozFqRa0別ファイルで objc コード書くと見通し悪いから、Swift に局所的に objc コード埋め込めたりすると面白いかな、
C#のunsafeとか __asm {} みたいに。欲を言えば言語指定クロージャみたいな感じ
0425デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/07(土) 08:53:14.57ID:4HC1Pjzk0それじゃwithout cにならないべ
0426デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)
2017/01/07(土) 08:55:58.44ID:72YrLFZp00427デフォルトの名無しさん (ササクッテロリ Sp3f-L2iV)
2017/01/07(土) 08:57:56.42ID:182Vw6zJp0428デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)
2017/01/07(土) 09:19:02.71ID:OQtShFizpなお、現在は、、、
0429デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)
2017/01/07(土) 09:31:45.95ID:72YrLFZp00430デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/07(土) 09:37:34.24ID:iBRfuxUXaって思う時って例えば具体的にどういうケースなんだろ
ただ単にC言語に慣れててすぐ書けるからってことじゃないよね?
0431デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)
2017/01/07(土) 12:02:53.35ID:OQtShFizp一応、UnsafeMutablePointerを操作するよりはCの生ポインタ操作出来る文法が楽ってのはあるけど
Swiftでポインタ操作が必要なら自前ラッパーAPIで隠蔽して上位レイヤーでは気にしなくて済むようにするよ
0432デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)
2017/01/07(土) 12:17:38.95ID:72YrLFZp0Obj-Cなら何も考えずそのまま実装できたことをSwiftでやろうとした時
どうするかって話だね
without Cを高らかに謳っているのだから仕方ないね
頑張ろう
0433デフォルトの名無しさん (オッペケ Sr3f-6vgr)
2017/01/07(土) 17:26:53.31ID:UVIgJaZNrシステムコール使うときとか?
0434デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/07(土) 17:53:33.27ID:p94OVxAQ0ファイルを行単位で読んで処理しようとする時とか
CのAPI使ったほうがスッキリ書けたりするケースがあるんだよね
http://stackoverflow.com/a/24669956/1000690
0435デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/07(土) 18:02:35.45ID:hf6ybaU+aでも、それ別ファイルにCで記述して、Swiftから呼ぶようにした方がメンテナンス性あるんじゃね?
0436デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)
2017/01/07(土) 18:34:39.92ID:OQtShFizp回答上位にある汎用クラス作って云々が良いとも思わないけども
そういうフォローをちゃんとした単純関数で実装したらCでもSwiftでも大して変わらんよな
、、、Swiftなら全データをStringに突っ込んで、改行文字でsplitとか乱暴するのも一興か
0437デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/07(土) 18:52:21.07ID:p94OVxAQ0どうだろうね?
別ファイルにしてAPIのインターフェース考えて実装してメンテナンスしていく手間をかけるだけのメリットがあるのかどうかによるよね
>>436
メモリのフットポイントを気にしないならSwiftでもそう変わらないだろうけど
気にするならNSDataとかで処理しないといけないからSwiftのほうが面倒だと思うよ
0438デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/07(土) 19:10:10.76ID:IyWm4kw10バイトストリーム、キャラクタストリーム, レキサー/パーサーに分けて繋げた方が後が楽だと思う
0439デフォルトの名無しさん (ワッチョイ 2bf8-+flj)
2017/01/07(土) 20:04:55.49ID:Gk0CJ/2J0CのAPIの方が簡単と言うのはプログラマが担保しなきゃいけない安全確認とかを全部すっ飛ばして書けるからであって
必要な安全性を確保しながらコード書くならSwiftの方が簡単だよ
0440デフォルトの名無しさん (ワッチョイ 6fa2-+flj)
2017/01/07(土) 20:37:16.77ID:w3Yo/XU60SIMD使う時とかはしょうがないよね?
そういうケースが稀なのは認める。
0441デフォルトの名無しさん (ワッチョイ dfc9-f1yY)
2017/01/07(土) 20:48:06.16ID:eRueAzeT00442デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/07(土) 20:52:00.96ID:UTTve38fa別ファイルにするにしても、同一ソース内に埋め込むにしても、データ受け渡しのためのインタフェースは考えないといけないだろ
0443デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/07(土) 21:18:40.07ID:p94OVxAQ0そういうケースもあるだろうけど例として上げたケースは
用意されてるCのAPIを使うかSwiftで自作のAPIを作るかの違い
>>442
コード見たの?
import Darwin
let bufsize = 4096
// let stdin = fdopen(STDIN_FILENO, "r") it is now predefined in Darwin
var buf = UnsafePointer<Int8>.alloc(bufsize)
while fgets(buf, Int32(bufsize-1), stdin) {
print(String.fromCString(CString(buf)))
}
buf.destroy()
0444デフォルトの名無しさん (スププ Sdff-+flj)
2017/01/07(土) 21:48:31.26ID:A7PZcJW4d>用意されてるCのAPIを使うかSwiftで自作のAPIを作るかの違い
そこに「用意されているSwiftのAPIを使う」と言う選択肢がないのがおかしくないかい?
SwiftならファイルパスでStringを初期化してenumrateLinesするだけでいいから
CのAPIでゴチャゴチャ作るよりはるかに簡単で安全だよ?
例えばあなたが>>443の下部で引用しているCの関数を使った例では
バッファサイズとして4096を取っているから
一行が4095文字以上の入力を受けると正しく動作しなくなっちゃうよ
この制限をC言語で解決するのは結構面倒くさいよ
0445デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/07(土) 21:49:05.59ID:UTTve38faコード見たよ
で?
0446デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/07(土) 21:55:01.67ID:p94OVxAQ0>SwiftならファイルパスでStringを初期化してenumrateLinesするだけでいいから
それメモリに全部読み込んでるでしょ?
極端な例だけど300MBのファイルだとして全部最初にString化するの?
0447デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/07(土) 21:55:42.79ID:p94OVxAQ0見てて>>442みたいな考えなら特に言うことはない
0448デフォルトの名無しさん (スプッッ Sdff-GcKO)
2017/01/07(土) 22:12:08.42ID:DTtrdLJ+d「ファイルを行単位で読んで処理しようとする時とか」の「とか」は、「ファイルを行単位で読んで処理しようとする時」以外の何?
>>439
「プログラマが担保しなきゃいけない安全確認とか」の「とか」は、「プログラマが担保しなきゃいけない安全確認」以外の何?
そんな「とか」の使い方じゃ、まともな仕様は作製できない。
0449デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/07(土) 22:21:44.29ID:IyWm4kw10http://swiftlang.ng.bluemix.net/#/repl/5870e7500f558d57abf31839
・セル内の改行に対応
・パイプライン的に処理(バッファ境界でUTF8が破断することも無し)
・改行コードはちょっと端折り
0450デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/07(土) 23:25:32.71ID:4HC1Pjzk0残念ながらこれは仕様書ではない
安全確認以外の何かを明確にするにはまず安全とは何かを定義しなければならないが
それを定義にするのは本来の議論の範囲外であり、
議論の本質の理解の妨げになるためあえて定義を行わなかった
そこで、明確に定義されていないことを明確に示すために「とか」を用いている
そう言うことを聞きたいわけ???
0451デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/07(土) 23:32:17.40ID:p94OVxAQ0超できる子だな
Swiftのシーケンスって読み終わったところからメモリ開放されるのかな?
そうじゃなければ別途chunkに分割しないと全処理時は最終的にメモリに乗るよね
0452デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)
2017/01/07(土) 23:54:15.55ID:PPvI4deGp0453デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/07(土) 23:55:36.10ID:IyWm4kw10Iteratorのクロージャが強参照してるもの以外は順次開放されるよ
UTF8デコーダと内部バッファ(4バイト?)、字句解析用の変数(end,hold)、
1レコード分(row:[String])がメモリ消費する
Array(parseCsv(...))すると全部抱えてしまうのでforEachで1レコードずつ処理する必要はある
0454デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/08(日) 00:11:05.12ID:JrkgmnK40http://swiftlang.ng.bluemix.net/#/repl/587104360f558d57abf31847
0455デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/08(日) 00:46:34.89ID:9hp7bz6e0そっかありがとう
>>454
すげーな 超参考になる
ファイル読み込みはchunkでやるけどあとはバイトストリームで処理できるから境界の心配しなくていいのね
こういうシーケンス使った考え方を知るのになんかオススメの本とか資料とかもしあったら教えて
Swiftじゃなくてもいいので
0456デフォルトの名無しさん (ワッチョイ 6f5b-yz8t)
2017/01/08(日) 09:45:34.32ID:qkk6ZrX+00457デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/08(日) 10:12:37.73ID:JrkgmnK40今ググって見つけたページではあるけど、こういうから知識を拾っておくと良いかも
http://hexadrive.jp/hexablog/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/12405/
http://ufcpp.net/study/csharp/da_about.html
http://postd.cc/pipes-and-filters/
の前半あたり
http://www.aerith.net/design/Decorator-j.html
切り分け方は先人に学ぶ感じで
http://kmaebashi.com/programmer/devlang/yacclex.html
https://msdn.microsoft.com/ja-jp/library/cc351995.aspx
用語バラバラだから似てるもので並べると
Swift3のSequence(2のSequenceType) ≒ AnyIteratorを返す関数
≒ JavaのIterable ≒ Pythonのジェネレータ ≒ C#のイテレータブロック/IEnumerable
Swift3のIteratorProtocol(2のGeneratorType) ≒ AnyIterator
≒ JavaのIterator ≒ Pythonのイテレータ ≒ C#のIEnumerator
※AnySquence, AnyIteratorはジェネリクス対応用(型消去法)
0458デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/08(日) 17:36:54.12ID:9hp7bz6e0ありがとう
心のなかでマスター先生と呼ばせてもらうよ
素養が違うからか教えてもらった記事からだとマスター先生の考え方に近づけそうにないんだが
もう少し頭のなかをストリーム化できるように日々修行するわ
0459デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/08(日) 17:40:12.38ID:9hp7bz6e0関数の戻り値の型
func greet(person: String) -> String {…}
↑Stringを返す関数
0460デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/09(月) 00:00:23.02ID:eHS8l2Ef0300MByteなら躊躇せずオンメモリで処理するかな?
1GByteならちょっと悩んでストリーム処理にするけどそれは実際に1GByteのファイルを喰らってから考える
遅くなるだけで処理としては破綻してないし
enumerateLinesでイテレート処理してれば
ストリーム処理にする場合でも行単位で文字列を取り出せるイテレータを定義するだけで
後段はそのまま使えるから移行は比較的楽
逆に
Cの関数で4095バイトとかバッファサイズで打ち切られちゃうと
4095文字以上の行に対応させるには
バッファの確保やマルチバイト文字の整合性とか色々考えるのが面倒
要するにCで書いてもSwiftで書いても簡単に書けるのは入門書のサンプルプログラムレベルのもので
細かいチェックを入れるとどちらもそこそこ書き込みが必要
その上で
1行が4095文字を超えると破綻するCの関数がいいと思うか
巨大ファイルを渡されると処理速度が遅くなる可能性のあるSwiftの標準関数を使うか
と言うだけの話だと思うよ
で、Swiftでプログラム書いてる途中でこの処理が必要なら
俺ならSwiftで書く方を選ぶと思う
0461デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/09(月) 00:13:07.51ID:vNdwgc8fa#!/usr/bin/env perl
while (<>) { print; }
0462デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/09(月) 00:18:04.60ID:vNdwgc8faちょっとした変換も簡単実装
cat lower.txt | perl -e 'while(<>) { print uc; }' > upper.txt
0463デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/09(月) 00:57:25.52ID:JTALZxOQ01GB使ったらiPhone6以下なら毎回クラッシュだよ
メモリの使用量を抑えつつ巨大なテキストファイルを読み込む時にどう処理するかって時の例だから
そこをすっ飛ばしたら意味ないがな
>Cの関数で4095バイトとかバッファサイズで打ち切られちゃうと
バッファサイズは状況に応じて変更すればいいでしょ?
それに本当に必要なら読み込んだバッファの最後の文字が改行じゃなければ次を読み込んで足してから処理すればいい
個人的にはそういう処理が必要になるようなケースには出会ったことがないけど
NSStream+NSDataとかでも同じことできるんだけど少し余計に手間がかかるから
Cを選ぶ人がいてもいいんじゃないかって話だ
0464デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/09(月) 01:06:52.96ID:vNdwgc8fa0465デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/09(月) 01:26:40.47ID:eHS8l2Ef0>バッファサイズは状況に応じて変更すればいいでしょ?
プログラムはどうやって状況を判断するんだ?
日本語の小説流し込んだら簡単に1行がメガバイト単位になるぞ?
0466デフォルトの名無しさん (ワッチョイ 0fba-oQtP)
2017/01/09(月) 02:22:19.00ID:9ACblGiY00467デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/09(月) 04:04:22.01ID:JTALZxOQ0別スレで質問してた人?
バッファサイズ考えるより前にそのファイルの入手方法を考えなおしたほうがいい気がするが
0468デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/09(月) 11:54:09.06ID:eHS8l2Ef0>別スレで質問してた人?
違うよ
単に俺(>>467)が>>434に難癖つけてるだけだよ
Cで書いた方が簡単な事もあるの例に
文字列I/Oって言う危険物を持ってきた上で
安全チェックもしてないコードを引用して、ほらCで書いた方が簡潔でしょ?
と言う論調がおかしいと思ったんで噛み付いてる
確かにCで書いた方がいい事もいっぱいある
だけど少なくともI/Oとか文字列処理とかC言語の中でも1番の危険物を持ってきて
危険だと言うことを知らせずにCで書いた方が簡単な例に上げるのはどうかと思うよ
こう言う危険性もあるけど、swiftからcの関数を呼び出せばこう言う書き方も出来るよ程度にしておいて欲しい
0469デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/09(月) 11:55:28.60ID:eHS8l2Ef0すまんあんかミス
>単に俺(>>467)が>>434に難癖つけてるだけだよ
おれは>>465ですた
0470デフォルトの名無しさん (ワッチョイ 7bcf-q3aP)
2017/01/09(月) 12:49:46.11ID:4OeNzyzM0入力が固定されてるなら問題ないと思う
0471デフォルトの名無しさん (ワッチョイ 5f93-+flj)
2017/01/09(月) 13:58:21.90ID:eHS8l2Ef0ファイル入力で常にこちらの思い通りのデータしか来ないことを想定するの?
入門書のチュートリアルならそれでもいいけどさ
入力データをこちらで決める事ができるなら
JsonとかXMLとかRealmとかのこなれたライブラリが存在するファイル形式を採用する方がいいと思うよ
そんなことを考えるとswiftの中でcを直接使うことの優位性はあまり無いと思うんだ
0472デフォルトの名無しさん (アウアウカー Sa3f-7kys)
2017/01/09(月) 14:53:15.83ID:C7tBzNeYa0473デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/09(月) 15:21:45.24ID:abgacrATa書き方の慣れの問題だけで
let lineSize = 1024
if let file = fopen(filePath, "r") {
let data = UnsafeMutablePointer<Int8>.allocate(capacity: lineSize)
defer {
data.deallocate(capacity: lineSize)
}
while((fgets(data, Int32(lineSize), file)) != nil) {
if let str = String(utf8String: data) {
print(str)
}
}
}
>>472
バリバリ使ってるよ
0474デフォルトの名無しさん (スッップ Sdff-GcKO)
2017/01/09(月) 15:25:37.56ID:ynBqv2kkd中上級の奴が使いたがるんだよね。
で、viewDidLoadで、IBOUTLETのframeいじって「変わらない!Xcodeのバグだっ」て騒ぐんだよね。
お前が世の中のバグだから。
ライフサイクル解らないグズだから。
0475デフォルトの名無しさん (ササクッテロリ Sp3f-/ZRc)
2017/01/09(月) 15:32:05.60ID:rN+gQaLTp乙
なんか長文くんまで現れてやってたけど結局これよな
しかし UnsafeMutablePointer を let 宣言できるのが相変わらずキモい
特別扱いできないものかねぇ
0476デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/09(月) 17:35:13.39ID:JTALZxOQ0そっか別人か
そのメガ単位で改行されてないテキストファイルって一般的なの?
平均3バイト/文字としても3MBで100万文字だよ?
fgetsやfscanfと同じ機能を持つAPIは今のところSwiftにはなくて
同じようなことをしようとするとどうしても結構な量のコードを書く必要があるから
CのAPIを使いたい場合の例として>>434を上げた
UnsafePointerを扱うってことは
メモリ周りで問題を引き起こすコードを書く危険性が高まるってことだからそこを天秤にかける必要性はわかる
ただそれ以外の安全チェックとか危険性とか言ってる部分はSwiftなら全部面倒みてくれるわけではないよね
0477デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/09(月) 17:49:07.80ID:JTALZxOQ0別人だってことなので一応この質問に答えとくと
プログラムで扱うファイルの1行の最大長が予測可能な範囲にあるならそれに応じてサイズ変更すればいいって意味ね
そうじゃないなら>>463に書いたようにバッファ内に改行があるかどうかをチェックして複数回バッファ読んでから処理する
この辺はC使っても使わなくても同じ
100MBを超えるようなテキストファイルってログファイルくらい処理しかないから発想が貧弱なのかもしれないけどね
0478デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)
2017/01/09(月) 17:51:25.34ID:LuXubKyCp0479デフォルトの名無しさん (スッップ Sdff-GcKO)
2017/01/09(月) 17:58:25.64ID:ynBqv2kkdログ以外だと、何かのデータファイルをCSVで書き出したケースも考えられる。
過去やったのだと、クイズを出すアプリで、問題をひたすらテキストファイルで持っていた。
でも、移動体端末で、でかいファイルを処理するのって、基本的なarchitectureを考え直した方が良い気がする。
0480デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/09(月) 18:09:09.39ID:JTALZxOQ0100%同意
iOSならテキストデータのインポート・エクスポート時が一番のユースケースだろうね
0481デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)
2017/01/09(月) 18:49:37.59ID:LuXubKyCp0482デフォルトの名無しさん (ワッチョイ 5b3c-GcKO)
2017/01/09(月) 19:35:52.53ID:Mfdzy40n0まあ、
>>477
さんの言う通りログなら仕方ないんだけれどもね。
ただ、そんなデカイログを端末で見るというarchitectureが・・・以下自粛。
0483デフォルトの名無しさん (ササクッテロロ Sp3f-+flj)
2017/01/09(月) 19:38:32.72ID:uxZFBykMpあんなもん設定した通りの優先順位付けで表示されるだけだろ
0484デフォルトの名無しさん (ワッチョイ 0f7b-MPfw)
2017/01/09(月) 23:59:11.54ID:qvjxruLM0JSのファイルでも、Minify とかで圧縮する
0485デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/10(火) 00:08:49.29ID:qN25f4rba0486デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)
2017/01/10(火) 09:52:08.69ID:0L0fi+PIpって話だったのに、データ構造だのAuto Layoutだのを議論しててワロタ
0487デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/10(火) 10:27:31.44ID:hQEZjrPha話が飛ぶのは2chではよくあることだから
0488デフォルトの名無しさん (スプッッ Sdff-oQtP)
2017/01/10(火) 10:40:39.28ID:L0gptR0Sd0489デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)
2017/01/10(火) 10:53:58.04ID:FDJAHjJcp0490デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)
2017/01/10(火) 10:56:22.37ID:0L0fi+PIpお前バイク板住民かよぉ
(今もあそこがアレな板なのかは知らん)
0491デフォルトの名無しさん (ササクッテロロ Sp3f-yz8t)
2017/01/10(火) 11:17:06.45ID:FDJAHjJcpで、そのあと、具体例として、ファイル読み込みの話になって、C言語で書いても可変サイズの行だと面倒じゃね? という話になって、そっからデータ構造の話に発展して、どさくさ紛れに、Auto Layoutの話を入れてくるKYが現れて、ってのがここまで流れだと思ったが...
まぁ、別に同じスレッドで違う話題を同時に扱うなって決まりはないしな
0492デフォルトの名無しさん (ワッチョイ df2b-vyGv)
2017/01/10(火) 11:44:11.95ID:nWa+BtAl0> ネタ、板とは関係の無い話題はご遠慮ください。
決まりはあるんだけどな
Inline C in Swiftはネタ(当人はマジの様子)だけど、それ以降はSwiftに絡めたネタも少なく・・・
データ構造やAutoLayoutを話すのはいいが、ネタとしてSwiftを絡める努力をしよう(他人事
0493デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/10(火) 11:56:12.46ID:1oVGbtNGaAutoLayoutに至っては4レスあっただけなのに
Swiftと全く無関係ってわけでもないやろ
0494デフォルトの名無しさん (スププ Sdff-+flj)
2017/01/10(火) 12:28:56.18ID:VHs9RTlPdwhile let l = readLine() {
print( l )
}
ただしファイルを標準入力にリダイレクトしておく
FileHandleにreadLineが定義されていないのが謎
0495デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)
2017/01/10(火) 12:35:10.25ID:0L0fi+PIpSwiftのCoreAPIにReaderがないのは3rd party libにぶん投げしてる気がする
0496デフォルトの名無しさん (ワッチョイ dfc9-f1yY)
2017/01/10(火) 14:03:45.11ID:8RubTyxI00497デフォルトの名無しさん (ワッチョイ 7bcf-q3aP)
2017/01/10(火) 14:08:24.18ID:s989ZmsY0昔の2ちゃんのhtml思い出した
0498デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/10(火) 15:07:36.80ID:tt6nQotl0// A
let s = sequence(first:0){$0+1}
.lazy
.map{$0*2}
s.prefix(10)
.reversed()
.forEach{print($0)}
// B
sequence(first:0){$0+1}
.lazy
.map{$0*2}
.prefix(10)
.reversed()
.forEach{print($0)}
0499デフォルトの名無しさん (ワッチョイ df3c-FtWv)
2017/01/10(火) 17:22:06.72ID:PjuH0Yrh0こういうの普通に動くようになって欲しいね
他言語だと問題なく動くケースのような気がする
(->> (iterate inc 1)
(map #(* 2 %))
(take 5)
(reverse)
(map println))
0500デフォルトの名無しさん (ササクッテロラ Sp3f-/ZRc)
2017/01/10(火) 17:34:25.49ID:0L0fi+PIp関数型言語なら文化に合ってるんだろうけどSwiftで書くコードじゃねぇ
もっと読みやすい書き方あるだろとコンパイラ以前に、人間様がコードレビュー時に発狂したい
0501デフォルトの名無しさん (スッップ Sdff-+flj)
2017/01/10(火) 17:46:11.19ID:IYumFm2zdよし、これならcを使った方が簡単に書ける例として文句無かろう
import Foundation
guard let fh = FileHandle(forReadingAtPath: "xxx"),
dup2(fh.fileDescriptor, 0) != -1 else {
fatalError("file/dup error")
}
while let line = readLine() {
print(line)
}
0502デフォルトの名無しさん (アウアウウー Sa3f-yz8t)
2017/01/10(火) 17:51:57.47ID:aMk4PEuoasequence(first:0){$0+1}
.prefix(20)
.map{$0*2}
.reversed()
.forEach{print($0)}
0503デフォルトの名無しさん (ワッチョイ 5b3c-HvS5)
2017/01/10(火) 18:00:07.10ID:tt6nQotl0処理順を入れ替えられる例を出してすまん
map→filter→prefixのような場合は対応出来ない
■ このスレッドは過去ログ倉庫に格納されています