問題タブ [swift4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
76 参照

swift - 連続した if ステートメントはどのように評価されますか?

チェックする if ステートメントが 2 つありますが、1 つのチェックは非常にコストがかかります。したがって、次のステートメントのどれが最もパフォーマンスが高いか疑問に思っています。

1) 「破滅のピラミッド」は嫌いだけど、うまくいくと確信している

2)私は通常このように書いています...しかしisCostlyBool、それisSimpleBoolはチェックしfalseますか?

3) これが機能することはわかっていますが、解決策 2 とは評価が異なりますか?

4) 私が見つけていない別の解決策はありますか?

0 投票する
1 に答える
3132 参照

arrays - 「パラメーター 'self' への同時アクセス...」という警告は本当にここに当てはまりますか?

Array最後の要素をポップしてすぐに別の配列に追加できる拡張機能を作成しました。

遊び場のこの簡単な例は魅力のように機能します:

しかし、構造体 (警告の後のコード) 内で拡張機能を使用すると、次の警告が表示されます。

パラメータ 'self' への同時アクセスですが、変更には排他的アクセスが必要です。ローカル変数へのコピーを検討する

これは単なる警告であり、私のアプリは予想どおりの動作で問題なく動作しますが、本当に危険があるのか​​知りたいです。SE-0176を見ると、警告の目的を理解できます。これを使用して、追加先の同じ配列から最後の要素をポップすると、コピーオンライトがそれを台無しにする可能性があるためです。そして、それは構造体に関連していると思います。しかし、同じ構造体内の 2 つの異なる配列で使用しても、危険はありません。潜在的な問題を回避する拡張機能を作成する方法はありますか?

0 投票する
1 に答える
69 参照

uitableview - 迅速なジェスチャレコグナイザーのテーブルビューセルが却下される

AKSideMenuを使用して、右から左にスワイプして表示されるメニューを作成しています。このサイド メニューには、セルをスワイプ (削除) できるテーブル ビューがあります。

セルの水平スワイプが認識されない理由がわかりません。

このエラーを再現できるアプリの例を次に示します。

(視差の例)

https://github.com/exocode/AKSideMenu ここに画像の説明を入力

問題を調査するためのデモは次のとおりです。

(視差) https://github.com/exocode/AKSideMenu

0 投票する
1 に答える
318 参照

ios - Swift 4 で書かれた Pod

質問があります、

Swift 4 と Xcode 9 で Cocoapods pod のようなライブラリを作成し、それを Swift 3 以前で作成された古いプロジェクトで使用できますか?

Codableたとえば、新しいプロトコルを使用するクラスがあります。そのクラスは古いプロジェクトで機能しますか?

ご協力いただきありがとうございます。

0 投票する
1 に答える
8245 参照

swift - Swift 4 の Smart KeyPaths で Key-Value Observing を使用するにはどうすればよいですか?

Smart KeyPathsNSArrayControllerを使用して、 の内容が変更されたときに通知を受け取る方法を教えてください。

に触発された

キー値の観察: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/AdoptingCocoaDesignPatterns.html#//apple_ref/doc/uid/TP40014216-CH7-ID12

スマート キーパス: Swift のキー値コーディングの改善: https://github.com/apple/swift-evolution/blob/master/proposals/0161-key-paths.md

記事のサンプルコードを真似しました。

しかし、それは機能していません。ターゲット オブジェクトに変更を加えても、通知は発生しません。

対照的に、以下にリストされている典型的な方法が機能しています。

新しい方法はよりエレガントに見えます。あなたの提案はありますか?

環境: Xcode 9 ベータ

  • macOS、ココア アプリ、Swift 4
  • ドキュメントベースのアプリケーションを作成する
  • コア データを使用する

  • myArrayControllerのモードはEntity Nameで、次で準備されていますDocument.xcdatamodeld

  • myArrayController管理対象オブジェクト コンテキストは、モデル キー パスにバインドされています:representedObject.managedObjectContext
  • representedObjectのインスタンスが割り当てられますDocument
  • NSTableViewコンテンツ選択インデックス、およびソート記述子は、の対応にバインドされmyArrayControllerます。

環境の詳細: Binding managedObjectContext、Xcode 8.3.2、Storyboards、mac : https://forums.bignerdranch.com/t/binding-managedobjectcontext-xcode-8-3-2-storyboards-macos-swift/12284

編集済み

上記の例に関して、私はのmanagedObjectContext代わりにcontentを観察することに気が変わりましたNSArrayController

その理由は、この 2 番目のアプローチが最初のアプローチよりも単純だからです。このコードは、表の行の追加と削除、および表のセルの値の変更など、必要な要件をすべてカバーしています。欠点は、アプリケーション内の別のすべてのテーブルの変更とさらに別のエンティティの変更によって通知が発生することです。しかし、そのような通知は面白くありません。しかし、それは大したことではありません。

対照的に、最初のアプローチはより複雑になります。

追加と削除の場合、2 つの関数を監視または実装する必要がありcontentますNSArrayController

からNSTableViewDelegate。は に接続されていNSTableViewます。delegateNSViewController

少し驚くべきことに、両方のtableView()関数が非常に頻繁に呼び出されます。たとえば、テーブルに 10 行ある場合、行を並べ替えると、10 回のdidRemove呼び出しの後に10 回の呼び出しが続きdidAddます。行を 1 つ追加すると、10 回のdidRemove呼び出しが発生し、さらに 11 回のdidAdd呼び出しが発生します。それはあまり効率的ではありません。

変更には、必要になります

からNSControlTextEditingDelegate、 のスーパーNSTableViewDelegateNSTextField各テーブル列はすべて、その を介して接続する必要がありNSViewControllerますdelegate

さらに、残念ながら、これcontrol()はテキストの編集が完了した直後に呼び出されますが、実際の値NSArrayControllerが更新される前に呼び出されます。つまり、やや無駄です。最初のアプローチではまだ良い解決策が見つかりません。

とにかく、この投稿の主なトピックはSmart KeyPaths の使い方です。:-)

編集2

両方使うつもり

  1. ... のプロパティcontentを観察する最初のものNSArrayController
  2. ... 2 番目のNotification投稿者を観察するNSManagedObjectContext

1 は、ユーザーがマスター/詳細ビューを変更したときのもので、 に変更を加えませんNSManagedObjectContext

2 は、ユーザーが変更を加えたときのためのものです: 追加、削除、更新、および元に戻す、マウスイベントを伴わないCommand-Z 。

現時点では、 のバージョンaddObserver(self, forKeyPath: "content", ...が使用されます。この投稿の問題が解決したら、次のバージョンに切り替えますobserve(\.content, ...

ありがとう。

編集3

コード 2.observing aNotificationは完全に新しいものに置き換えられました。

0 投票する
1 に答える
129 参照

ios - xcode9 プロジェクトに .mmmodel ファイルを追加する最良の方法は?

私のアプリでは、Inceptionv3 のような機械学習モデルを追加したいと考えています。

プロジェクトに Inceptionv3.mmmodel を追加するにはどうすればよいですか?

0 投票する
1 に答える
1892 参照

swift - Swift 4:関連付けられた型配列をインスタンス化するときに、非関数型 '[Self.Element.Type]' の値を呼び出すことはできません

この記事 ( https://www.uraimo.com/2016/01/06/10-Swift-One-Liners-To-Impress-Your-Friends/ )の Xcode 9 beta 2 Swift 4 でいくつかの演習を行っていたときアイテム番号を実行中にエラーが発生しました。6:

Xcode 9 は、次の行でエラーをスローしていました。

完全なエラーは次のとおりです。

typealias を削除して完全なSelf.Iterator.Element型を使用しても、エラーは解決しません。

このコードは Swift 3 で完全に動作します。Swift 4 で動作しない理由がわかりません。関連付けられた型の処理に関して Swift 4 の変更である場合、誰かが私を助けてくれますか?配列。

0 投票する
1 に答える
442 参照

swift - reloadRows が正しく機能しない

テキストが 100 文字に及ぶため、my に [more] ボタンが表示されますcommentCell。それを押すと、セルは行を 0 に制限し、セルをリロードする必要があります。

問題は、セルを 2 回押して拡大し、2 回押してセルを最小化する必要があることです。

これは、セルを拡大するための私のコードです:

注:この機能は正常に動作しますが、合計 2 回クリックした場合のみです。正しいセルが拡大し、それに応じてボタンの説明が変わります。

重要

print ステートメントを使用して、状態がいつ変化するかを確認してみました。私が言ったように、それは毎秒しかしません。

を削除すると

ワンクリックで変化します。

前もって感謝します!

0 投票する
1 に答える
2186 参照

swift - Swift 4 でデコード可能なジェネリック

Swift 4 で導入された新しいDecodableプロトコルを使用しています。単体テスト内で、特定のDecodableタイプの特定の JSON ファイルをデコードする汎用メソッドを使用したいと考えています。

JSONDecoder decodeメソッドに一致する次の関数を作成しました。

コンパイラは私に次のエラーを与えます:

In argument type 'Obj.Type', 'Obj' does not conform to expected type 'Decodable'

Objのためにデコード可能であると想像したでしょう。where

その機能の何が問題になっていますか?

0 投票する
1 に答える
190 参照

swift - `Calendar` API が Swift Playground をクラッシュさせる

シンプルなプレイグラウンド:

2つを切り替えましたが、どちらもプレイグラウンドを実行すると同じエラーが発生します:

エラー: 実行が中断されました。理由: EXC_BAD_ACCESS (コード=EXC_I386_GPFLT)。

Xcode 9ベータ2を実行しています