Рассмотрим частную функцию C _UICreateScreenUIImage, которая возвращает моментальный снимок UIImage текущего экрана устройства:
OBJC_EXTERN UIImage *_UICreateScreenUIImage(void) NS_RETURNS_RETAINED;
Я могу поместить это в заголовок моста и получить доступ к нему в Swift следующим образом:
MyApp-мост-header.h
@import UIKit;
UIImage *_UICreateScreenUIImage(void) NS_RETURNS_RETAINED;
MyClass.swift
let image = _UICreateScreenUIImage()
print(image) // <UIImage: 0x7fc4ba6081c0>, {375, 667}
Есть ли способ получить доступ к _UICreateScreenUIImage в чистом Swift без использования заголовка моста?
Первоначальная мысль заключалась в том, чтобы создать расширение на UIImage, но расширение ожидает, что я объявлю тело функции в расширении:
extension UIImage {
public func _UICreateScreenUIImage(_: Void) -> UIImage // "Expected '{' in body of function declaration"
}
Эта реализация в любом случае ошибочна, поскольку _UICreateScreenUIImage не является методом на UIImage.
Является ли доступ и доступ к этому методу в чистом Swift?
Люди, похоже, путают мой вопрос: "Как сделать снимок экрана?" Это не то, что я прошу. Я спрашиваю, как мне получить доступ к таким методам, как UIImage *_UICreateScreenUIImage(void); в Swift. Это может быть любой частный метод, например +(UIImage *)_deviceSpecificImageNamed:(NSString *)name inBundle:(NSBundle *)bundle; или +(UIImage *)_pu_PhotosUIImageNamed:(NSString *)name;
.