Swift3 - Бинарный оператор '==' нельзя применять к операндам типа 'AnyObject?' и 'FileAttributeType' - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь проверить FileAttributeType. Вот моя логика для сравнения: -

let attributes = try fileManager.attributesOfItem(atPath: "/Users/AUSER/Desktop/Downloads")
            print(attributes)

            if (attributes[FileAttributeKey.type] as AnyObject? == FileAttributeType.typeSymbolicLink ){
                print("YESSS \(attributes[FileAttributeKey.type])")
            }

error-> Двоичный оператор '==' нельзя применить к операндам типа 'AnyObject?' и 'FileAttributeType'

1 Ответ

0 голосов
/ 04 сентября 2018

(большая) ошибка в том, что вы разыгрываете очень специфический тип

static let type: FileAttributeKey

Соответствующим значением является String object

к очень неопределенному типу AnyObject. AnyObject нельзя сравнивать.


Приведите тип к String и сравните с rawValue FileAttributeType

if attributes[FileAttributeKey.type] as? String == FileAttributeType.typeSymbolicLink.rawValue {

Примечание: настоятельно рекомендуется всегда использовать URL-адреса, а не строковые пути и получать атрибуты файла непосредственно из URL

let url = URL(fileURLWithPath: "/Users/AUSER/Desktop/Downloads")
if let resourceValues = try? url.resourceValues(forKeys: [.fileResourceTypeKey]),
    resourceValues.fileResourceType! == .symbolicLink {
    print("YESSS \(resourceValues.fileResourceType!.rawValue)")
}
...