本软件包提供了一个 SwiftUI 视图 ShareLinkButton
,可以用于分享各种数据类型。
在我进行 SwiftUI 项目的经验中,我注意到在不同的 iOS 版本上实现分享链接功能存在差距。虽然 Apple 在 iOS 16 中引入了 ShareLink API,但很大一部分用户和项目仍然在使用较早的版本,例如 iOS 15 甚至 iOS 14。考虑到许多应用程序至少还需要几年时间才能停止支持这些早期版本。这种需求促使我开发了一个软件包,它提供了与 ShareLink 类似的功能,但与较早的 iOS 版本兼容。
Transportable
类型。@available(iOS 14.0, *)
public struct ShareLinkButton<Label: View>: View {
public init<T: Transportable>(
item: T,
icon: UIImage? = nil,
title: String? = nil,
printAction: Bool = true,
applicationActivities: [UIActivity]? = nil,
excludedActivityTypes: [UIActivity.ActivityType]? = nil,
@ViewBuilder label: @escaping () -> Label
)
public init(
itemSource: UIActivityItemSource,
applicationActivities: [UIActivity]? = nil,
excludedActivityTypes: [UIActivity.ActivityType]? = nil,
@ViewBuilder label: @escaping () -> Label
)
}
String (字符串)
URL
UIImage
Data (数据)
NSAttributedString
CLLocation
ShareLinkButton(item: "Hello, world!", label: {
Text("Share Text")
})
ShareLinkButton(item: URL(string: "https://example.com")!, icon: UIImage(systemName: "link"), title: "Check this out!", label: {
HStack {
Image(systemName: "square.and.arrow.up")
Text("Share URL")
}
})
let location = CLLocation(latitude: 37.7749, longitude: -122.4194) // Coordinates for San Francisco
ShareLinkButton(item: location, label: {
Text("San Francisco location")
})
按钮外观可以通过标签闭包进行自定义,从而可以与宿主应用程序的设计系统集成。此外,开发者可以指定自定义活动或排除某些活动类型,以根据应用程序的需求定制分享体验。
SwiftUI 中的 ShareLinkButton
允许开发者通过提供自己的 UIActivityItemSource
来定制分享体验。 此接口可以精确控制共享的数据及其格式,具体取决于用户选择的活动类型。
UIActivityItemSource
:首先创建一个符合 UIActivityItemSource
协议的类。 此类将指定激活共享表单时要共享的数据。import UIKit
class CustomItemSource: NSObject, UIActivityItemSource {
let text: String
let url: URL
init(text: String, url: URL) {
self.text = text
self.url = url
}
func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
return text
}
func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? {
return text
}
func activityViewController(_ activityViewController: UIActivityViewController, subjectForActivityType activityType: UIActivity.ActivityType?) -> String {
return "Custom Subject"
}
func activityViewController(_ activityViewController: UIActivityViewController, dataTypeIdentifierForActivityType activityType: UIActivity.ActivityType?) -> String? {
return "public.url"
}
func activityViewController(_ activityViewController: UIActivityViewController, thumbnailImageForActivityType activityType: UIActivity.ActivityType?, suggestedSize size: CGSize) -> UIImage? {
return UIImage(systemName: "link.circle")
}
}
let source = CustomItemSource(
text: "Check out this amazing website!",
url: URL(string: "https://www.example.com")!
)
ShareLinkButton(item: source) {
Label("Share", systemImage: "square.and.arrow.up")
}
本软件包采用 MIT 许可证。 更多详情请参阅 LICENSE 文件。