タグ付けされた質問 「swift-language」

Swiftは、iOSおよびOSXアプリを作成するためにAppleによって設計されたプログラミング言語です。Swiftは、CとObjective-Cの基盤の上に構築されています。

5
これらの比較で、SwiftはどのようにObjective-Cよりもずっと速くできますか?
Apple はWWDC14で新しいプログラミング言語Swiftを発売しました。プレゼンテーションでは、Objective-CとPythonのパフォーマンスを比較しました。以下は、これらのスライドの1つで、複雑なオブジェクトの並べ替えを実行するこれら3つの言語の比較の写真です。 RC4暗号化アルゴリズムを使用したパフォーマンス比較について、さらに驚くべきグラフがありました。 明らかにこれはマーケティングの話であり、彼らはこれがそれぞれにどのように実装されているかについては詳しく説明しませんでした。私は私が疑問に思うままにします: 新しいプログラミング言語はどのように高速化できますか? Objective-Cの結果は不良なコンパイラが原因ですか、Objective-CではSwiftよりも効率が悪いものがありますか? 40%のパフォーマンス向上をどのように説明しますか?ガベージコレクション/自動化された参照制御は、追加のオーバーヘッドを生成する可能性があることを理解していますが、これだけですか?

10
なぜプログラムはクロージャーを使用するのですか?
ここでクロージャーを説明する多くの投稿を読んだ後、私はまだ重要な概念がありません:なぜクロージャーを書くのですか? プログラマーが実行する特定のタスクのうち、クロージャーが最も役立つと思われるものは何ですか? Swiftでのクロージャーの例は、NSUrlのアクセスとリバースジオコーダーの使用です。以下にそのような例を示します。残念ながら、これらのコースは閉鎖を示しています。コードソリューションがクロージャとして記述されている理由は説明されていません。 私の脳を「あぁ、これのためにクロージャを書くべきだ」と言うかもしれない現実世界のプログラミング問題の例は、理論的な議論よりも有益でしょう。このサイトで利用可能な理論的議論の不足はありません。

1
Swiftプロトコルの命名規則[終了]
主にC#のバックグラウンドから来て、私は動作を定義する実装のないオブジェクトを記述するために「インターフェース」という用語を使用することに慣れています。C#ではIEnumerable、などのように、インターフェイス名の先頭に「I」を付けます。 もちろん、コンセプトは異なる言語で異なる名前を持っています。Swiftでは、同じ概念が「プロトコル」と呼ばれます。プロトコルを開発しているとき、プロトコルとそれを実装するクラスの名前がよく似ています。これまでのところ、C#で「I」を使用するのと同じ方法で、これらのオブジェクトに「プロトコル」という単語を追加していますEnumerableProtocol。 迅速なプロトコルの命名規則についての考えはありますか?

8
例外処理メカニズムなしで現代言語を設計する理由
多くの現代言語は豊富な例外処理機能を提供していますが、AppleのSwiftプログラミング言語は例外処理メカニズムを提供していません。 私は例外に悩まされていますが、これが何を意味するのかを頭で悩ませています。Swiftにはアサーションがあり、もちろん戻り値があります。しかし、私は例外に基づいた考え方が例外なく世界にどのようにマップされるのかを想像するのに苦労しています(そのため、そのような世界が望ましい理由)。Swiftのような言語ではできないことはありますか?例外をなくすことで何かを得られますか? たとえば、次のように表現するにはどうすればよいでしょうか try: operation_that_can_throw_ioerror() except IOError: handle_the_exception_somehow() else: # we don't want to catch the IOError if it's raised another_operation_that_can_throw_ioerror() finally: something_we_always_need_to_do() 例外処理のない言語(たとえば、Swift)で

2
現代の言語はまだパーサージェネレーターを使用していますか?
これが出てきたとき、私はここウィキペディアで gccコンパイラスイートについて調査していました: GCCはBisonで生成されたLALRパーサーの使用を開始しましたが、徐々に手書きの再帰パーサーに切り替えました。2004年のC ++、および2006年のCおよびObjective-Cの場合。現在、すべてのフロントエンドは手書きの再帰下降パーサーを使用しています。 最後の文で(そしてウィキペディアを信頼する限り)私は間違いなく「C(gcc)、C ++(g ++)、Objective-C、Objective-C ++、Fortran(gfortran)、Java(gcj)、 Ada(GNAT)、Go(gccgo)、Pascal(gpc)、... Mercury、Modula-2、Modula-3、PL / I、D(gdc)、およびVHDL(ghdl)」はすべてフロントエンドであり、パーサージェネレーターを長く使用します。つまり、それらはすべて手書きのパーサーを使用します。 私の質問は、このプラクティスはどこにでもあるのですか?特に、[Python、Swift、Ruby、Java、Scala、ML、Haskell]のxの「xの標準/公式実装には手書きパーサーがありますか」に対する正確な答えを探していますか?(実際、他の言語に関する情報もここで歓迎されています。)掘り下げた後、私は自分でこれを見つけることができると確信しています。しかし、これはコミュニティによって簡単に答えられると確信しています。ありがとう!

6
Swift関数と計算されたプロパティ
Event次のようなクラスがあるとします: class Event { private var attendees: [Person] = [] // Case 1 //******* // Should I use a func… func countOfAttendees() -> Int { return attendees.count } // …or a var var countOfAttendees: Int { return attendees.count } // Case 2 //******* // Should I use a func… func …

3
単体テストでの循環的な依存関係との闘い
私はTDDを使って、Bit Vectorのような単純なものを開発することで、TDDを実践しようとしています。私はたまたまSwiftを使用していますが、これは言語に依存しない質問です。 My BitVectorは、struct単一のを格納し、そのUInt64上にコレクションのように扱うことができるAPIを提供します。詳細はさほど重要ではありませんが、非常に簡単です。上位57ビットはストレージビットであり、下位6ビットは「カウント」ビットであり、格納された値を実際に格納するストレージビットの数を示します。 これまでのところ、非常にシンプルな機能がいくつかあります。 空のビットベクトルを構築する初期化子 countタイプのプロパティInt isEmptyタイプのプロパティBool 等号演算子(==)。注意:これは、JavaのObject.equals()ような参照等価演算子ではなく、==Javaのような値等価演算子です。 私は周期的な依存関係の束に直面しています: イニシャライザをテストする単体テストでは、新しく構築されたを確認する必要がありBitVectorます。次の3つの方法のいずれかで実行できます。 チェック bv.count == 0 チェック bv.isEmpty == true それを確認します bv == knownEmptyBitVector 方法1は依存count、方法2は依存isEmpty(それ自体が依存しているcountため、使用する意味はありません)、方法3は依存してい==ます。いずれにしても、初期化子を単独でテストすることはできません。 のテストはcount何かを操作する必要があり、必然的に私のイニシャライザーをテストします の実装は、にisEmpty依存していますcount の実装はに==依存していcountます。 BitVector(aとしてUInt64)既存のビットパターンからを構築するプライベートAPIを導入することにより、この問題を部分的に解決することができました。これにより、他のイニシャライザーをテストせずに値を初期化できたので、「ブートストラップ」することができました。 ユニットテストが本当にユニットテストであるためには、たくさんのハックをしていることに気付きます。 この種の問題をどのように正確に回避しますか?

2
Swiftがセミコロンを必要としないのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私は通常c#またはObjective-Cのいずれかでコーディングし、最近Appleの新しいプログラミング言語であるSwiftを習得しました。 私が最初に気づいたのは、Swiftで行を終了するためにセミコロンを追加する必要がないことですが、少なくともテストしたことからすれば、コンパイラに干渉しません。 私が書くとき: int someNumber = 0; Objective-Cでは、セミコロンはプログラムに、行が終わって次の行に落ちないことを伝えます。 Swiftでは、変数を宣言できます var someNumber:Int = 5 セミコロンを追加しないと、システムはこれが行の終わりであることを認識します。 一部の言語でこれを行うことができ、他の言語ではできないことは何ですか?最後にセミコロンを追加する均一なシステムを維持してみませんか?

3
Swiftの各デリゲートに個別のクラス拡張を使用する理由は何ですか?
私はレイ・ウェンダリッヒのチュートリアルを進めていましたが、作者がクラス拡張機能を使用してデリゲートコールバックを保持していることに気付きました。 クラス拡張内のコールバックを委任する: extension LogsViewController : UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } それをクラス内に含めるのではなく: クラス内のコールバックを委任する: class LogsViewController : UITableViewController, UIPopoverPresentationControllerDelegate { func adaptivePresentationStyleForPresentationController(controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { ... } } 私はこれを同時に奇妙で面白いと感じました。「LogsViewControllerExtension.swift」という名前のLogsViewControllerクラスの拡張機能専用のファイルがあり、デリゲートプロトコルごとに異なる拡張機能があります:UITableViewDataSource、UISplitViewDelegateなど。 それぞれ独自のファイル内でコールバックを委任する複数のクラス拡張機能: extension LogsViewController: UISplitViewControllerDelegate { ... callbacks } extension LogsViewController : UIPopoverPresentationControllerDelegate …

3
関連する一連のプロパティを独自の構造体/クラスにラップすることは良い習慣ですか?
私の質問は強く型付けされた言語に関係しますが、SwiftでUserオブジェクトを作成します。ユーザーは多数のリンク(FacebookProfile、InstagramProfileなど)を持つことができます。これに関するいくつかの質問。 リンクを独自のオブジェクトでラップすることは良い習慣ですか? struct User { var firstName:文字列 var lastName:文字列 var email:string varリンク:リンク } 構造体リンク{ var facebook:string var instagram:文字列 var twitter:文字列 } それともルーズにすべきですか?技術的にはどちらの方法でも問題ないことはわかっていますが、一般的に、特に読みやすさのために、推奨されるアプローチがあるかどうか疑問に思います。 struct User { var firstName: string var lastName: string var email: string var facebookLink: string var twitterLink: string var instagramLink: string } このようなシナリオでは、リンクはコレクション/リストにする必要がありますか?利用可能なリンクオプションの数は決まっているため、リストの数にしないでください。数は増えていません。私の考えは正しいですか? getUsers、getUser、updateUserなどのユーザーオブジェクト内にネットワークメソッドを配置することは良い習慣ですか? これらは主観的である可能性があることは知っていますが、同様の状況でのベストプラクティスを理解しようとしています。任意のポインタをいただければ幸いです。

1
Swiftにウィットネステーブルが必要なのはなぜですか?
Swiftの実装の詳細を読み込もうとしていますが、特定できないのは、その「ウィットネステーブル」です。構造体に使用される別個のvtableポインターのようです。 しかし、なぜそれが必要なのでしょうか。構造体は値によってコピーされるため、コンパイル時にそれらの型がわかっています。では、どのメソッドを呼び出してそれを実行するかをハードコーディングするだけではないでしょうか?これらのメソッドで仮想ディスパッチを実行する理由

3
Swiftがサブクラスの適切なフィールドを最初に初期化するのはなぜですか?
Swift言語では、インスタンスを初期化するには、そのクラスのすべてのフィールドに入力し、その後でスーパーコンストラクターを呼び出す必要があります。 class Base { var name: String init(name: String) { self.name = name } } class Derived: Base { var number: Int init(name: String, number: Int) { // won't compile if interchange lines self.number = number super.init(name) } } selfフィールドに値を割り当てる前にインスタンスを作成する必要があり、そのコードはチェーンが割り当て後にのみ発生するかのような印象を与えるため、私にとっては逆に思えます。それとは別に、スーパークラスにはサブクラスの導入された属性を読み取る法的な手段がないため、この場合は安全性は考慮されません。 また、JavaScriptのような他の多くの言語や、Swiftのいくらか霊的な祖先であるObjective Cでさえ、アクセスする前selfではなく、アクセスする前にチェーン呼び出しが必要です。 スーパーコンストラクタを呼び出す前にフィールドを定義する必要があるというこの選択の背後にある理由は何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.