私はsetValue
を使用してクラス内のプロパティを設定し、非常に奇妙な動作をします。特定のプロパティを設定しようとすると、実行は自分の機能を壊し、それを呼び出すものから続行します。デバッグコンソールにコンパイルエラーはなく、エラーもありません。ここに例を取り除きました:XCodeがエラーをキャッチしていません
class User: NSObject{
var profilePictureURL: NSURL?
var contextId: String?
var isOnboarded: Bool?
func populate(data: [String: AnyObject]){
for(key,value) in data {
switch key {
case "profilePictureURL":
self.setValue(NSURL(string: String(value)), forKey: key)
}
case "contextId":
self.setValue(String(value), forKey: key)
}
case "isOnboarded":
if let boolValue = value as? Bool {
self.setValue(boolValue, forKey: key) // Here is the problem line
}
}
}
}
いくつかのブレークポイントを設定してアプリを実行します。一部のユーザーデータを入力して呼び出すと、setValue
はprofilePictureURL
とcontextId
に対して正しく機能します。しかし、それがisOnboarded
Bool
のsetValue
に達すると、私の機能はあたかもreturn
のようになります。エラーはなく、デバッグウィンドウには何も表示されません。私はその行にブレークポイントを設定し、boolVal
が実際にはBool
とタイプされていることを確認し、その行をステップインしようとします。 XCodeはこのクラスから抜け出し、そのvarを決して設定せず、(別のクラスの)次のブレークポイントで停止します。関数を終了するだけです。それは奇妙です。
エラーが発生した場合は、XCodeが何らかの方法で私に通知すると思います。実行を次のブレークポイントにジャンプするだけで、デバッグが不可能になります。私はこのコードで何が間違っているのか分かりません。
問題の原因を特定するためにここに追加できるものはありますか?これは奇妙なSwift/Xcodeのバグですか?
編集:私はDerivedDataをクリアし、Cleanを実行しようとしました。
編集2:私はこれを理解することができませんでした。私は上記の私のコード例でいくつかのタイプミスをしていましたが、手元の問題には関係ありませんでした。なんらかの理由でsetValue
はreturn
のように振る舞いますが、単にエラーのない関数を終了します。私はそうのように明示的に設定値に戻って落ちたんだ:
self.contentId = String(value)
あなたのスイッチケース...あまりにも多くの閉じたもので、中括弧をチェックしてください。 – BallpointBen