尝试在我的应用程序中重新集成共享按钮.苹果再次改变了一些事情Swift 3的iOS 10.我刚刚更新到Xcode 8发布版本,它一直在给我一些问题UIActivities.
发现它们中的许多现在UIActivityType.都是为了使编译器不会失败而开始的.然而,他们中的许多人仍在使用com.apple它也使我因某种原因将activityType数组转换为类型[Any].
那么......有谁知道他们为什么这样做?你在activityTypesToExclude.contains(where: (Any) throws -> Bool)方法中的for参数中放了什么?
internal func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool {
let activityTypesToExclude = [
"com.apple.reminders.RemindersEditorExtension",
UIActivityType.openInIBooks,
UIActivityType.print,
UIActivityType.assignToContact,
UIActivityType.postToWeibo,
"com.google.Drive.ShareExtension",
"com.apple.mobileslideshow.StreamShareService"
] as [Any]
if let actType = activity.activityType {
if activityTypesToExclude.contains(where: (Any) throws -> Bool) {
return true
}
else if super.excludedActivityTypes != nil {
return super.excludedActivityTypes!.contains(actType)
}
}
return false
}
Run Code Online (Sandbox Code Playgroud)
UIActivityType是一个类型安全的瘦包装器,用于表示活动类型的String.如果您找到了一些没有预定义常量的活动类型,您可以使用扩展名定义自己的活动类型.
extension UIActivityType {
static let remindersEditorExtension = UIActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension")
static let googleDriveShareExtension = UIActivityType(rawValue: "com.google.Drive.ShareExtension")
static let streamShareService = UIActivityType(rawValue: "com.apple.mobileslideshow.StreamShareService")
}
Run Code Online (Sandbox Code Playgroud)
使用上面的扩展,你可以写这样的东西:
internal func _shouldExcludeActivityType(_ activity: UIActivity) -> Bool {
let activityTypesToExclude: [UIActivityType] = [
.remindersEditorExtension,
.openInIBooks,
.print,
.assignToContact,
.postToWeibo,
.googleDriveShareExtension,
.streamShareService
]
if let actType = activity.activityType {
if activityTypesToExclude.contains(actType) {
return true
} else if let superExcludes = super.excludedActivityTypes {
return superExcludes.contains(actType)
}
}
return false
}
Run Code Online (Sandbox Code Playgroud)
您不应该直接在Swift 3代码中使用原始字符串表示.
那么,为什么他们这样做呢?:通过此更改,程序员在意外地包含activityType标识符所需的非活动类型字符串的机会大大减少.
例如,对一些String常量进行了类似的更改Notification.Name.