Ios UIS在Swift 3中的活动
正在尝试在我的应用程序中重新集成共享按钮。苹果再次在iOS 10的Ios UIS在Swift 3中的活动,ios,swift,swift3,Ios,Swift,Swift3,正在尝试在我的应用程序中重新集成共享按钮。苹果再次在iOS 10的swift3中做出了改变。我刚刚更新到Xcode 8发布版本,它给了我一些UIActivities方面的问题 发现它们中的许多现在以UIActivityType.开头,以便编译器不会失败。然而,他们中的许多人仍然在使用com.apple,出于某种原因,这也让我将activityType数组转换为type[Any] 所以说。。。有人知道他们为什么那样做吗?在activitypestoexclude.contains(其中:(Any)
swift3
中做出了改变。我刚刚更新到Xcode 8
发布版本,它给了我一些UIActivities
方面的问题
发现它们中的许多现在以UIActivityType.
开头,以便编译器不会失败。然而,他们中的许多人仍然在使用com.apple
,出于某种原因,这也让我将activityType
数组转换为type[Any]
所以说。。。有人知道他们为什么那样做吗?在activitypestoexclude.contains(其中:(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
}
UIActivityType
是一种类型安全的精简包装器,用于活动类型的字符串表示。如果发现某些活动类型没有预定义的常量,可以使用扩展名定义自己的活动类型
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")
}
通过上面的扩展,您可以编写如下内容:
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
}
您不应该在Swift 3代码中直接使用原始字符串表示
那么,关于他们为什么这样做呢?:有了这一变化,程序员意外地在需要activityType标识符的地方包含非activityType字符串的机会要小得多
一些字符串常量也做了类似的更改,例如
Notification.Name
我对如何使用这个函数有些困惑。我尝试了activityViewController.excludedActivityTypes=[UIActivityType.streamShareService]
但它不起作用。请您解释一下如何使用函数\u应该排除活动类型
,这样我就可以排除com.apple.mobileslideshow.StreamShareService
首先,检查一下。(也许你已经检查过了,但还是要仔细检查。)如公认答案中所述,\u应该排除活动类型是一个私有API,使用此API的应用程序有被苹果拒绝的风险。苹果公司随时都会在没有通知的情况下更改一些详细的实现。你可以自己冒险尝试,但我无法解释“如何使用它”,因为我不知道什么会真正起作用。上面的答案只是解释如何创建UIActivityType
的实例。