Swift

Swift:remoteObjectsバグ発見2

removeをremoteと書いていたバグの影響が次第に判明してきました。

少しふざけたバグです。正しい命令にすると正しく動作しないことが判明しました。

配列の最後の行を削除して再帰呼び出しを見つけるロジックで、これ自体が再帰的に実行されているのですが、どうもこの削除がうまくないようです。

もうひとつの問題は、これは問題でないかもしれないのですが、メソッドが呼び出されない場合、機能的な制限があることがわかりました。バグとまでは言い切れない。そう思っていますが、もう少し調査が必要です。

もう一度、同じコードをSwift3.0に変換しました。ここで再学習したことは次の点です。

バグの原因

バグは、.removeが.remoteになってたことが直接の原因。今までは、削除が無効になっていました。ここでは、次のような機能を想定していました。

  • if    ppxec == “URL1”   { self.ExecReadURL(pURL: “a”)   }
  • pxecをスタック
  • =をスタック
  • 次に==であることが判明し、A==Bの形式なので、=を削除し、AとBを変数として抽出する。

しかし、.removeに直したあと、意図した通りに動かないことがわかりました。機能実装が不十分でした。

Swift3.0変換の注意事項その2

  • @IBAction func ExecIBActionLanguageEN(_ sender:AnyObject) {
    こうしないとエラーになります。
  • func ExecSupressProcess(pSuppress:Int, pCom1:String) {
    ExecSupressProcess(pSuppress:wAlert.suppressionButton!.state, pCom1:pCom2)
    最初の呼び出し元パラメタのpSuppress:を省略したい場合、呼び出し先を_ pSuppress:とします。func ExecSupressProcess(_ pSuppress:Int, pCom1:String) {
  • var wPhotoURLArray:[URL?]  = [nil]
    var wPhotoURLArray:[URL?]  = [URL()] のような書き方では、エラーになります。
  • 実際には、このほかにもコンパイルエラーや警告が少し出ますが、プロンプトにしたがって修正すれば、うまくいきます。例) if String(describing:wcolumn) == “” { }

 

Categories: Swift, 技術

Tagged as: