Метод не может быть помечен как @objc, потому что тип параметра 2 не может быть представлен в Objective-C [duplicate]

Если у вас возникли проблемы с отправкой писем с помощью PHP, рассмотрите альтернативу, например PHPMailer или SwiftMailer .

Обычно я использую SwiftMailer всякий раз, когда мне нужно для отправки писем с PHP.


Основное использование:

require 'mail/swift_required.php';

$message = Swift_Message::newInstance()
    // The subject of your email
    ->setSubject('Jane Doe sends you a message')
    // The from address(es)
    ->setFrom(array('jane.doe@gmail.com' => 'Jane Doe'))
    // The to address(es)
    ->setTo(array('frank.stevens@gmail.com' => 'Frank Stevens'))
    // Here, you put the content of your email
    ->setBody('

New message

Here goes the rest of my message

', 'text/html'); if (Swift_Mailer::newInstance(Swift_MailTransport::newInstance())->send($message)) { echo json_encode([ "status" => "OK", "message" => 'Your message has been sent!' ], JSON_PRETTY_PRINT); } else { echo json_encode([ "status" => "error", "message" => 'Oops! Something went wrong!' ], JSON_PRETTY_PRINT); }

Подробнее о том, как использовать SwiftMailer, см. в официальной документации .

10
задан Oleksandr 16 May 2016 в 16:42
поделиться

3 ответа

Вы очень хорошо объяснили проблему самостоятельно:

class Person: Hashable {

Лицо не является NSObject. Objective-C может видеть только тип класса, основанного на NSObject. Поэтому ваш тип Person невидим для Objective-C. Но ваша декларация @objc func предназначена для функции, которая принимает массив Person - и мы только что сказали, что Person является невидимым для Objective-C. Таким образом, ваша декларация @objc func является незаконной. Objective-C нельзя показать эту функцию, потому что ее невозможно отобразить.

Вам нужно изменить объявление класса, чтобы начать следующим образом:

class Person: NSObject {

... и тогда вам, конечно, придется внести необходимые коррективы в реализацию класса. Но это изменение сделает вашу декларацию @objc func законной. (NSObject - Hashable, поэтому объем работы, необходимый для этой адаптации, может быть не очень большим.)

19
ответ дан matt 22 August 2018 в 14:53
поделиться
  • 1
    Но что мне делать с var hashValue: Int {return self.intID} Просто удалить? – Oleksandr 16 May 2016 в 17:13
  • 2
    Да, но тогда вам все равно нужно решить, как вы хотите, чтобы хэшируемость / равноудаленность работала для этого класса. Им нужно работать вместе. Если вы не скажете, что хотите, Cocoa вернется к идентификатору объекта, который, похоже, не так, как вы хотите. И вам нужно сделать это так, как ожидает Какао. Вот что я имел в виду в своем ответе на «дальнейшие корректировки». - См. Например, stackoverflow.com/a/33320737/341994 – matt 16 May 2016 в 18:31

С этой меньшей информацией я могу только попытаться предложить вам поставить это перед объявлением Person.

@objc(Person)
class Person {
...
}
0
ответ дан ciccioska 22 August 2018 в 14:53
поделиться
  • 1
    мы можем использовать @objc, когда вызываем класс ... но: NSObject помог много ...) – Oleksandr 16 May 2016 в 22:47

Я получал это, потому что я объявил класс Notification самостоятельно, и он возился с классом Notification Foundation.

@objc func playerItemDidReachEnd(notification: Notification) {...}

Поэтому я изменил его на Foundation.Notification

@objc func playerItemDidReachEnd(notification: Foundation.Notification) {...}
1
ответ дан iOS Developer 22 August 2018 в 14:53
поделиться
  • 1
    точно такая же проблема у меня была. – John Riselvato 15 May 2018 в 10:44
Другие вопросы по тегам:

Похожие вопросы: