LoginSignup
0
0

More than 5 years have passed since last update.

Ambiguous reference to member 'cookies'のエラー

Posted at

はじめに

objective-cからSwiftへの移行で、cookieの削除につまづいたのでメモしておきます。
尚、知識が浅いため誤った理解を記述している可能性がございます。。。。
ご了承ください。

開発環境

・xcode9.4
・Swift4.0

objective-cからSwiftに移行してみた

objective-cのもともとのコード

移行前.m
    // パスを取得
    NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject;

    // ファイル名の作成
    NSString *cookiesPath = [libraryPath stringByAppendingPathComponent:@"Cookies"];
    NSString *webKitPath = [libraryPath stringByAppendingPathComponent:@"WebKit"];

    // パスを指定してファイルの削除
    [[NSFileManager defaultManager] removeItemAtPath:cookiesPath error:nil];
    [[NSFileManager defaultManager] removeItemAtPath:webKitPath error:nil];

    // クッキーを取得?(おまじない的な?)
    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    [cookieStorage.cookies enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) {
        [cookieStorage deleteCookie:cookie];
    }];

Swiftへ移行してみた

before:修正前

修正前.swift
        // パスを取得
        let libraryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first as String?

        // ファイル名の作成
        let cookiesPath = libraryPath?.appending("Cookies")
        let webKitPath = libraryPath?.appending("WebKit")

        // ファイル,ディレクトリの削除(現状はこの辺適当です。。。。間違ってる説ある。)
        do {
            try FileManager.default.removeItem(atPath: cookiesPath!)
            try FileManager.default.removeItem(atPath: webKitPath!)
        } catch {
            // エラー処理 
        }

        // クッキーを取得?(おまじない的な?)
        let cookieStorage :HTTPCookieStorage = HTTPCookieStorage.shared

        // Cookieを削除
        for cookie:HTTPCookie in [cookieStorage.cookies] { // 😭😭😭😭😭
            cookieStorage.deleteCookie(cookie)
        }

😭😭😭😭😭の部分で、Ambiguous reference to member 'cookies' のエラー。。。
これを解消しても、いろんなエラーが出てきて苦戦しておりました。
(そもそもなんもわかってないレベルに書き方がやばそう。。。)

after:修正後

修正後.swift
        // パスを取得
        let libraryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first as String?

        // ファイル名の作成
        let cookiesPath = libraryPath?.appending("Cookies")
        let webKitPath = libraryPath?.appending("WebKit")

        // ファイル,ディレクトリの削除(現状はこの辺適当です。。。。間違ってる説ある。)
        do {
            try FileManager.default.removeItem(atPath: cookiesPath!)
            try FileManager.default.removeItem(atPath: webKitPath!)
        } catch {
            // エラー処理
        }

        let cookieStorage :HTTPCookieStorage = HTTPCookieStorage.shared

        // Cookieを削除
        if let cookies = cookieStorage.cookies { // この辺を修正☺️☺️☺️☺️☺️
            for cookie in cookies {
                cookieStorage.deleteCookie(cookie)
            }
        }

これで一応エラーは消えました。
buildした時も大丈夫そうだったので、一旦おけですかね。。。。
cookieStorage.cookiesをfor文にそのまま突っ込んではダメということでしょうか。。。?

解決はできた?もののモヤモヤ。
理解が追いつき次第追記しようと思います。

参考

ちなみに、このページに記載されていたfor文を参考にしました。
参考:http://furodrive.com/2015/10/set_cookie/

尚、Cookieの削除方法は下記のページを参考にさせていただきました(objective-c側)
UIWebViewのCookieを削除する(Googleアカウントでログインなどで前の状態が保持されてしまう問題)

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0