iOS именованные каналы, работает в Obj C, не работает в Swift, тот же код - PullRequest
0 голосов
/ 18 марта 2020

Я пытался использовать именованные каналы в iOS, но, похоже, в основном тот же код в Swift дает сбой, в то время как в Objective C он работает.

В Swift FileHandle для записи возвращается ноль, или если я использую API-интерфейс FileHandle (forWritingAt: URL), он выдает разрешение «Отказано». В Objective C данные успешно отправлены через канал и зарегистрированы.

Путь в обоих из них является точно таким же. Данные в примере Objective C также "hello" .data (используя: .utf8), хотя и передаются в функцию.

Swift

  do {
    try FileManager.default.removeItem(at: url)
  } catch let error {
    print("error deleting", error)
  }

  mkfifo(url.path, 0777)
  DispatchQueue.main.async {
    let fileHandle = FileHandle(forWritingAtPath: url.path)
    fileHandle?.write("hello".data(using: .utf8)!)
  }

  let fileHandle = FileHandle(forReadingAtPath: url.path)
  if let data = fileHandle?.availableData {
    print(String(data: data, encoding: .utf8))
  }

Objective C

  remove(path.UTF8String);
  mkfifo(path.UTF8String, 0777);
  dispatch_async(dispatch_get_main_queue(), ^{
    NSFileHandle *fileHandle=[NSFileHandle fileHandleForWritingAtPath: path];
    [fileHandle writeData:data];
  });

  NSFileHandle *fileHandle=[NSFileHandle fileHandleForReadingAtPath: path];
  NSData* read = fileHandle.availableData;
  NSLog([[NSString alloc] initWithData: read encoding: NSUTF8StringEncoding]);

Это просто вызов функции Objective C, верно? Почему они ведут себя по-другому? XCode 11,3 iOS 13

Ответы [ 2 ]

3 голосов
/ 03 апреля 2020

Есть ли у Свифта восьмеричные числа? Я так не думаю.
у Свифта нет восьмеричного

Боюсь, у Свифта есть восьмеричные числа, см. Целочисленные литералы

mkfifo(url.path, 0o777)
0 голосов
/ 03 апреля 2020

@ gnasher729 был верным - у Свифта нет восьмеричного, поэтому 0777 был не прав. Я преобразовал восьмеричное в шестнадцатеричное и заменил литерал на 0x1FF

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...