我刚刚将Xcode 10.1更新为Xcode 10.2,之后,当我尝试构建我的应用程序时,发现一个错误提示。使用Swift 4.2编译的模块不能由Swift 5.0编译器导入。
/myProjectFolderPath/myProjectName/ViewControllers/FeedbackVC/SupportViewController.swift:11:8: Module compiled with Swift 4.2 cannot be imported by the Swift 5.0 compiler: /myProjectFolderPath/Pods/ZendeskSDK/ZendeskSDK/4.2.1/ZendeskSDK.framework/Modules/ZendeskSDK.swiftmodule/x86_64.swiftmodule
Run Code Online (Sandbox Code Playgroud)
我通过cocoapods集成的ZendeskSDK出现了问题。
需要帮助和事先感谢。
将项目迁移到快速5之后,我遇到了很多错误,例如
Expression implicitly coerced from 'UIButton?' to 'Any'
Run Code Online (Sandbox Code Playgroud)
我不确定是什么原因造成的。我正在设置view.accessibilityElements时(发生一堆)的一个例子。该数组应该包含:[Any]?...知道是什么原因造成的吗?
这是一个例子:
@IBOutlet weak var shareButton: UIButton!
@IBOutlet weak var shareTitleLabel: UILabel!
view.accessibilityElements = [shareButton, shareTitleLabel]
Run Code Online (Sandbox Code Playgroud)
这是另一个示例:
@IBOutlet weak var titleLabel: UILabel!
let titleConstraints = [
NSLayoutConstraint(item: titleLabel, attribute: .leading, relatedBy: .equal, toItem: otherView, attribute: .leading, multiplier: 1, constant: horizontalTextInset),
NSLayoutConstraint(item: titleLabel, attribute: .trailing, relatedBy: .equal, toItem: otherView, attribute: .trailing, multiplier: 1, constant: -horizontalTextInset)
]
Run Code Online (Sandbox Code Playgroud)
像这样设置上面的元素时,会导致提到的错误
我有一个Mac应用程序项目,该项目使用Swift 4在XCode 10.2.1中生成并运行。当我尝试将其转换为Swift 5时,该过程开始,然后在大约32步(大约158个)中锁定该计算机,它要么重启,要么我不得不强迫它关闭。我应该寻找什么来阻止这种情况的发生?
“锁定”是指一切停止。XCode中的纺车图形表示事情正在停止。鼠标指针冻结。键盘无响应。屏幕上的所有动画都会停止(例如,如果指针是“死亡的旋转披萨”-会停止旋转)如果我将其放置足够长时间,则它可能会重新启动-两个提示音。
我试过转换另一个项目,并且转换没有任何问题。所以我要假设我有一个特定于该项目的东西
我已经在两台机器上进行了尝试-我的2012 Mac Mini配备16GB RAM,而MBP则更新了几年,配备了8GB RAM。两者都存在相同的问题。
我还尝试在项目中将Swift版本从4.0设置为4.2。发生相同的事情-机器处理更改并在此过程中锁定。但是,这次在锁定之前,我得到了“强制退出”对话框窗口,并显示一条消息,告诉我所有可用的应用程序内存已用完,我应该强制退出应用程序。在这一点上,机器死机了,所以我不能这样做。
我已经尝试过对该主题进行一些搜索,但没有发现任何描述我的问题的信息。
我没有要显示的代码,因为我不知道是什么代码引起的(如果有的话-当然这可能是XCode中的错误)。这可能是Xcode项目文件中的设置。
所需的结果-Xcode将我的项目从Swift 4转换为Swift 5。
实际结果-Xcode完全锁定了计算机。我必须关闭Mac电源并重新启动。
所以问题是-我应该寻找什么来解决这个问题?有没有其他人有这个问题?我该如何解决?冻结和重新启动有点令人震惊。
As I port some Objective-C code to Swift, I'm trying to better understand the new Combine framework and how I can use it to re-create a common design pattern.
In this case, the design pattern is a single object (Manager, Service, etc) that any number of "clients" can register with as a delegate to receive callbacks. It's a basic 1:Many pattern using delegates.
Combine看起来很适合这个,但示例代码有点薄。下面是一个工作示例,但我不确定它是否正确或按预期使用。特别是,我对对象之间的引用循环很好奇。
class Service {
let tweets = PassthroughSubject<String, Never>()
func start() {
// Simulate the need …Run Code Online (Sandbox Code Playgroud) 我有一堂课,我有这样的财产:
var residenceId: Int!
Run Code Online (Sandbox Code Playgroud)
使用Xcode 10和Swift 4.2进行构建时,没有问题。但是,在安装Xcode 11 Beta并转换为Swift 5之后,我得到以下警告:
Implicitly unwrapped property 'residenceId' declared here
Run Code Online (Sandbox Code Playgroud)
在上一节课中,我还具有以下功能:
func jsonDictionary() -> [String : Any] {
return ["residenceId": residenceId]
}
Run Code Online (Sandbox Code Playgroud)
我在这里得到警告
Coercion of implicitly unwrappable value of type 'Int?' to 'Any' does not unwrap optional
Run Code Online (Sandbox Code Playgroud)
我们是否不再被允许使用隐式展开的可选?
编辑:
经过更多研究之后,我开始相信“在这里声明的未包装属性'residenceId'实际上不是警告”,而是一些信息(以灰色标签而不是通常的黄色)以帮助我理解为什么我收到第二个警告。
为了澄清,我的问题是,我们是否不再能够使用“!” 属性上的符号定义一个隐式解开的属性(仅在我们确定它不会为nil时才明显),以便以后避免显式解开它(从而简化代码)。
当我将项目更新到iOS 13时,我遇到了异常问题。我有显示和处理某些UISearchController动作的逻辑(下面的代码),所有部分在iOS 11和12中均正常运行。
我的任务是在导航栏中添加搜索按钮,以UISearchController在按钮操作后显示。
但是在iOS 13中,我遇到了2个问题:
从按钮动作调用的代码
func showSearch() {
let searchResultsController = LUSearchResultsViewController()...
let searchController = UISearchController(searchResultsController: searchResultsController)
searchController.delegate = self
searchController.searchResultsUpdater = searchResultsController
navigationItem.searchController = searchController
definesPresentationContext = true
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
searchController.isActive = true
}
}
Run Code Online (Sandbox Code Playgroud)
只有一种解决方案可以帮助我显示搜索控制器,而与以前的iOS版本没有任何区别。
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
searchController.isActive = true
}
Run Code Online (Sandbox Code Playgroud)
在iOS 13,iOS 11和12上运行的代码无需asyncAfter
帮助我隐藏UISearchController和设置iOS 11和12(而非13)中的导航栏初始状态的代码。在SearchBar上点击“ 取消 ” 后,UISearchController开始调用委托方法。
//MARK: UISearchControllerDelegate
public func willDismissSearchController(_ searchController: UISearchController) {
self.navigationItem.searchController = …Run Code Online (Sandbox Code Playgroud) 我有一个自定义的 UIStoryboardSegue,可以在 iOS12.* 中按需要工作。
目标视图控制器之一是 UITabbarController:对于每个选项卡,我都有一个嵌入在导航控制器中的控制器。
不幸的是,对于 iOS13.*,这不能很好地工作:视图控制器生命周期被破坏,并且不再调用 viewXXXAppear() 和 willTransition() 方法。
看起来 makeKeyAndVisible() 没有效果?!
在底部查看屏幕 UI 在没有调用 viewWillAppear() 的情况下是如何困惑的。
一个可怕的临时解决方法
我不得不拉我的头发,但是,我找到了一个公开的修复程序(我必须即时添加导航控制器)。
这弄乱了 vc 层次结构:你有更好的解决方案吗?
public class AladdinReplaceRootViewControllerSegue: UIStoryboardSegue {
override public func perform() {
guard let window = UIApplication.shared.delegate?.window as? UIWindow,
let sourceView = source.view,
let destinationView = destination.view else {
super.perform()
return
}
let screenWidth = UIScreen.main.bounds.size.width
let screenHeight = UIScreen.main.bounds.size.height
destinationView.frame = CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight)
window.insertSubview(destinationView, aboveSubview: sourceView)
// **My fix**
if …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个奇怪的视觉错误,它仅适用于从 Xcode 11 版本运行的 iOS 13。我有一个嵌入在导航控制器中的表格视图,默认色调颜色设置为我的应用程序的主要橙色。在 iOS12 上,当您取消搜索操作时,您会看到一个后退按钮,该按钮遵循主要橙色的全局导航控制器色调。这是预期的行为。如下图所示:
但是,同样的代码在iOS13中产生了一个系统默认的蓝色后退箭头,如下图:
我已经尝试了一切来尝试覆盖那个蓝色的后退按钮,包括使用自定义操作创建一个自定义的 Bar Button Item,但这太混乱了,我只想简单地覆盖色调颜色。我已经尝试了很明显的searchController.searchBar.tintColor = UIColor(named:"Primary")searchController 是我的 UISearchController,并且我试图覆盖 self.navigationController 色调颜色。我试过本机访问 SearchBar,如下所示:UISearchBar.appearance().tintColor = UIColor(named:"Primary"),但仍然没有运气。我已经在 IB 中尝试了我能想到的所有其他方法,但我无法弄清楚如何达到这个后退按钮的色调。有人可以帮忙吗?
我使用 firebase 动态链接。当应用程序在后台并且我使用该application continue userActivity功能时,它们工作得非常好。但是,如果我单击动态链接并冷启动应用程序(不在后台运行),那么不仅不会application continue userActivity运行,当我在 处断点时didFinishLaunchingWithOptions,我尝试打印launchOptions并返回nil.
我完全按照文档描述的方式设置了动态链接。
在关联的域中 - 我有applinks:*******.page.link并在 URL 类型下创建了一个标识符*******.page.link和 URL 方案作为我的捆绑标识符。
在didFinishLaunchingWithOptions- 之前FirebaseApp.configure(),我这样做(根据我发现的有关通用链接的类似问题的指示)FirebaseOptions.defaultOptions()?.deepLinkURLScheme = org.*******.*****
firebase swift ios-universal-links firebase-dynamic-links swift5
我正在使用属性包装器来保存我的用户默认值。在 iOS 13 设备上,此解决方案效果很好。但是,在 iOS 11 和 iOS 12 上,这些值不会保存到用户默认值中。我读到属性包装器向后兼容,所以我不知道为什么这不适用于较旧的 iOS 版本。
这是属性包装器:
@propertyWrapper
struct UserDefaultWrapper<T: Codable> {
private let key: String
private let defaultValue: T
init(key: String, defaultValue: T) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: T {
get {
guard let data = UserDefaults.standard.object(forKey: key) as? Data else {
// Return defaultValue when no data in UserDefaults
return defaultValue
}
// Convert data to the desire data type
let value = try? JSONDecoder().decode(T.self, from: data) …Run Code Online (Sandbox Code Playgroud)