問題タブ [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.
swift - 連続した if ステートメントはどのように評価されますか?
チェックする if ステートメントが 2 つありますが、1 つのチェックは非常にコストがかかります。したがって、次のステートメントのどれが最もパフォーマンスが高いか疑問に思っています。
1) 「破滅のピラミッド」は嫌いだけど、うまくいくと確信している
2)私は通常このように書いています...しかしisCostlyBool
、それisSimpleBool
はチェックしfalse
ますか?
3) これが機能することはわかっていますが、解決策 2 とは評価が異なりますか?
4) 私が見つけていない別の解決策はありますか?
arrays - 「パラメーター 'self' への同時アクセス...」という警告は本当にここに当てはまりますか?
Array
最後の要素をポップしてすぐに別の配列に追加できる拡張機能を作成しました。
遊び場のこの簡単な例は魅力のように機能します:
しかし、構造体 (警告の後のコード) 内で拡張機能を使用すると、次の警告が表示されます。
パラメータ 'self' への同時アクセスですが、変更には排他的アクセスが必要です。ローカル変数へのコピーを検討する
これは単なる警告であり、私のアプリは予想どおりの動作で問題なく動作しますが、本当に危険があるのか知りたいです。SE-0176を見ると、警告の目的を理解できます。これを使用して、追加先の同じ配列から最後の要素をポップすると、コピーオンライトがそれを台無しにする可能性があるためです。そして、それは構造体に関連していると思います。しかし、同じ構造体内の 2 つの異なる配列で使用しても、危険はありません。潜在的な問題を回避する拡張機能を作成する方法はありますか?
uitableview - 迅速なジェスチャレコグナイザーのテーブルビューセルが却下される
AKSideMenuを使用して、右から左にスワイプして表示されるメニューを作成しています。このサイド メニューには、セルをスワイプ (削除) できるテーブル ビューがあります。
セルの水平スワイプが認識されない理由がわかりません。
このエラーを再現できるアプリの例を次に示します。
(視差の例)
https://github.com/exocode/AKSideMenu
問題を調査するためのデモは次のとおりです。
ios - Swift 4 で書かれた Pod
質問があります、
Swift 4 と Xcode 9 で Cocoapods pod のようなライブラリを作成し、それを Swift 3 以前で作成された古いプロジェクトで使用できますか?
Codable
たとえば、新しいプロトコルを使用するクラスがあります。そのクラスは古いプロジェクトで機能しますか?
ご協力いただきありがとうございます。
swift - Swift 4 の Smart KeyPaths で Key-Value Observing を使用するにはどうすればよいですか?
Smart KeyPathsNSArrayController
を使用して、 の内容が変更されたときに通知を受け取る方法を教えてください。
に触発された
スマート キーパス: 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
ます。delegate
NSViewController
少し驚くべきことに、両方のtableView()
関数が非常に頻繁に呼び出されます。たとえば、テーブルに 10 行ある場合、行を並べ替えると、10 回のdidRemove
呼び出しの後に10 回の呼び出しが続きdidAdd
ます。行を 1 つ追加すると、10 回のdidRemove
呼び出しが発生し、さらに 11 回のdidAdd
呼び出しが発生します。それはあまり効率的ではありません。
変更には、必要になります
からNSControlTextEditingDelegate
、 のスーパーNSTableViewDelegate
。NSTextField
各テーブル列はすべて、その を介して接続する必要がありNSViewController
ますdelegate
。
さらに、残念ながら、これcontrol()
はテキストの編集が完了した直後に呼び出されますが、実際の値NSArrayController
が更新される前に呼び出されます。つまり、やや無駄です。最初のアプローチではまだ良い解決策が見つかりません。
とにかく、この投稿の主なトピックはSmart KeyPaths の使い方です。:-)
編集2:
両方使うつもり
- ... のプロパティ
content
を観察する最初のものNSArrayController
- ... 2 番目の
Notification
投稿者を観察するNSManagedObjectContext
1 は、ユーザーがマスター/詳細ビューを変更したときのもので、 に変更を加えませんNSManagedObjectContext
。
2 は、ユーザーが変更を加えたときのためのものです: 追加、削除、更新、および元に戻す、マウスイベントを伴わないCommand-Z 。
現時点では、 のバージョンaddObserver(self, forKeyPath: "content", ...
が使用されます。この投稿の問題が解決したら、次のバージョンに切り替えますobserve(\.content, ...
ありがとう。
編集3:
コード 2.observing aNotification
は完全に新しいものに置き換えられました。
ios - xcode9 プロジェクトに .mmmodel ファイルを追加する最良の方法は?
私のアプリでは、Inceptionv3 のような機械学習モデルを追加したいと考えています。
プロジェクトに Inceptionv3.mmmodel を追加するにはどうすればよいですか?
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 の変更である場合、誰かが私を助けてくれますか?配列。
swift - reloadRows が正しく機能しない
テキストが 100 文字に及ぶため、my に [more] ボタンが表示されますcommentCell
。それを押すと、セルは行を 0 に制限し、セルをリロードする必要があります。
問題は、セルを 2 回押して拡大し、2 回押してセルを最小化する必要があることです。
これは、セルを拡大するための私のコードです:
注:この機能は正常に動作しますが、合計 2 回クリックした場合のみです。正しいセルが拡大し、それに応じてボタンの説明が変わります。
重要
print ステートメントを使用して、状態がいつ変化するかを確認してみました。私が言ったように、それは毎秒しかしません。
を削除すると
ワンクリックで変化します。
前もって感謝します!
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
その機能の何が問題になっていますか?
swift - `Calendar` API が Swift Playground をクラッシュさせる
シンプルなプレイグラウンド:
2つを切り替えましたが、どちらもプレイグラウンドを実行すると同じエラーが発生します:
エラー: 実行が中断されました。理由: EXC_BAD_ACCESS (コード=EXC_I386_GPFLT)。
Xcode 9ベータ2を実行しています