我刚刚将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电源并重新启动。
所以问题是-我应该寻找什么来解决这个问题?有没有其他人有这个问题?我该如何解决?冻结和重新启动有点令人震惊。
我有一堂课,我有这样的财产:
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) 假设您有一个带有普通自定义 UICollectionViewLayout 的 UICollectionView。
所以这不是<<<流布局 - 这是一个正常的自定义布局。
自定义布局很简单,在prepare调用中您只需遍历数据并布置每个矩形即可。所以说这是一个垂直滚动集合......
override func prepare() {
cache = []
var y: CGFloat = 0
let k = collectionView?.numberOfItems(inSection: 0) ?? 0
// or indeed, just get that direct from your data
for i in 0 ..< k {
// say you have three cell types ...
let h = ... depending on the cell type, say 100, 200 or 300
let f = CGRect(
origin: CGPoint(x: 0, y: y ), …Run Code Online (Sandbox Code Playgroud) 我有一个 swift UIHostingController,它呈现 SwiftUI。我在视图中调用了一个函数,它确实出现了,它构建得很好,但没有创建预期的输出。
class LoginView: UIHostingController<LoginViewComponent> {
required init?(coder: NSCoder) {
super.init(coder: coder, rootView: LoginViewComponent())
}
override func viewDidAppear(_ animated: Bool) {
sessionHandler()
}
func sessionHandler(){
let user = User()
if user.isLoggedIn(){
view.isUserInteractionEnabled = false
print("Authenticating Session")
self.rootView.loginState(state: "success")
}else{
view.isUserInteractionEnabled = true
print("Needs Logging in")
}
}
}
Run Code Online (Sandbox Code Playgroud)
函数 ("loginState(state: "success")") 在 SwiftUI 视图类中调用时有效,但是当从托管控制器调用时它不起作用。
任何帮助将不胜感激。
我有两个函数,其中一个函数基本上检索用户默认值中的字符串,另一个函数将字符串写入用户默认值中。我不明白我应该进行单元测试还是不进行?我对单元测试的概念还很陌生。
我在互联网上搜索测试用户默认值,但最后建议我模拟测试。
我的问题是,如果有办法测试用户默认值,最好的方法是什么?
常量和结构体
let defaults = UserDefaults.standard
let defaultinformation = "ABCDEFG"
struct Keys {
static let Information = "Information"
}
Run Code Online (Sandbox Code Playgroud)
保存信息的功能
func SetDefaultInformation() {
defaults.set(defaultinformation, forKey: Keys.Information)
}
Run Code Online (Sandbox Code Playgroud)
检索信息的函数
func checkForInformation() -> String {
let Information = defaults.value(forKey: Keys.Information) as? String ?? ""
return Information
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
重现步骤:
下面是日志:
2020-03-26 17:21:00.894598+0530 TestApp[783:152843] 连接 2:收到失败通知
2020-03-26 17:21:00.895805+0530 TestApp[783:152843] 连接 2:连接失败 1:53,原因 -1
2020-03-26 17:21:00.895895+0530 TestApp[783:152843] 连接 2: 遇到错误(1:53)
2020-03-26 17:21:00.901375+0530 TestApp[783:152843] 任务 <36B9553A-99F2-42FE-8650-A5E5155EFCFD>.<1> HTTP 加载失败,0/0 字节(错误代码:-1005 [1 :53])
2020-03-26 17:21:00.901831+0530 TestApp[783:152843] 连接 1:收到失败通知
2020-03-26 17:21:00.902078 + 0530 TestApp [783:152843] [] nw_flow_add_write_request [C1.1 40.85.185.46:443失败的通道流(满足(路径满足),接口:en0,ipv4,dns) ] 无法接受写入请求
2020-03-26 17:21:00.902200 + 0530 TestApp [783:152843] [] nw_write_request_report [C1]发送失败,错误“套接字未连接”
2020-03-26 17:21:00.905902 + 0530 TestApp [783:152870]任务<36B9553A-99F2-42FE-8650-A5E5155EFCFD>。<1>完成,错误[-1005]错误域= NSURLErrorDomain代码= -1005“网络连接丢失了。” UserInfo = {NSUnderlyingError = 0x2824734e0 {错误域= kCFErrorDomainCFNetwork Code = -1005“(null)”UserInfo = …
当我发布一个 Swift 包时,我喜欢包含一些 Playgrounds 来展示如何使用这个包的示例。在 Swift 5.4 之前,我能够以相对简单的方式执行此操作,但现在我的 Playgrounds 都没有看到我的包模块的内容。这对我来说没有任何意义。
我遵循了 Apple 自己的 WWDC 视频所说明的确切模式,即有一个Playgrounds/文件夹作为您的Sources/文件夹的对等点,然后只需导入包模块。
导入有效,但 Playground 总是报告它无法从模块内部找到任何类型。它们都被标记为public,正如我之前提到的,这些过去工作得很好。
这在Swift 5.4或5.5 中,在Xcode 12.5或13 Beta 中对我不起作用。
我认为一定有一些我不理解的设置或配置。有人可以在这里解释一下最佳做法吗?
作为参考,这里是我的一个简单的 Swift 包,它的 Playgrounds 目前不起作用:https : //github.com/dunesailer/Wordsmith
编辑:它变得更奇怪了。我有一个不同的Swift 包,其结构在我看来完全相同,但它的 Playgrounds 工作正常。什么?那个在这里:https : //github.com/dunesailer/Aesthete