teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

hook

2016/12/16 02:06

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -13,7 +13,7 @@
13
13
 
14
14
  # setValue(_:forUndefinedKey:)
15
15
 
16
- 定義されていないプロパティにアクセスするとsetValue(_:forUndefinedKey:)が呼ばれますので、これをoverrideすると例外を発生させずに処理を行うことが出来ます。
16
+ 定義されていないプロパティにアクセスするとsetValue(_:forUndefinedKey:)が呼ばれますので、これをoverrideして例外をフックします。
17
17
 
18
18
  下記のコードでは、存在しないキー`hoge`にsetValue()すると挨拶してくれます。(動作確認はSwift2のPlaygroundで行いました)
19
19
 

1

Hello!

2016/12/16 02:06

投稿

fuzzball
fuzzball

スコア16733

answer CHANGED
@@ -9,4 +9,27 @@
9
9
  [キー値コーディングプログラミングガイド](https://developer.apple.com/jp/documentation/KeyValueCoding.pdf)
10
10
 
11
11
  英語ドキュメント(新しい/html)
12
- [About Key-Value Coding](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueCoding/)
12
+ [About Key-Value Coding](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/KeyValueCoding/)
13
+
14
+ # setValue(_:forUndefinedKey:)
15
+
16
+ 定義されていないプロパティにアクセスするとsetValue(_:forUndefinedKey:)が呼ばれますので、これをoverrideすると例外を発生させずに処理を行うことが出来ます。
17
+
18
+ 下記のコードでは、存在しないキー`hoge`にsetValue()すると挨拶してくれます。(動作確認はSwift2のPlaygroundで行いました)
19
+
20
+ ```swift
21
+ class Hoge : NSObject {
22
+ override func setValue(value: AnyObject?, forUndefinedKey key: String) {
23
+ if key == "hoge" {
24
+ print("Hello!")
25
+ } else {
26
+ super.setValue(value, forUndefinedKey: key)
27
+ }
28
+ }
29
+ }
30
+
31
+ Hoge().setValue(0, forKey: "hoge")
32
+ //=> Hello!
33
+ ```
34
+
35
+