编辑:正如sunshinejr在这里指出的,此问题已修复,将与下一个Xcode / Swift版本一起发布。
在使用Swift 4和Swift 5代码库将Xcode 10.1更新为Xcode 10.2之后,我已经看到很多奇怪的行为。
问题之一是在一个ViewController上不再调用ScrollView委托方法。简化的视图层次结构如下:
| ScrollView (ParentScrollView)
| -- Stack View
| ---- ScrollView (ChildScrollView)
| ---- ScrollView (ChildScrollView)
| ---- ScrollView (ChildScrollView)
Run Code Online (Sandbox Code Playgroud)
它充当具有多个页面的视图:ParentScrollView可以水平滚动,ChildScrollView垂直滚动。
ViewController是所有Scrollview(在Storyboard中设置)的委托,但是scrollViewDidEndDecelerating在滚动任何视图(ParentScrollView或ChildScrollView)时不会调用委托方法(如)。该基类的ViewController符合UIScrollViewDelegate。
我试过在代码中设置委托,除了不知道自己可能做错了什么。该转换未更改该类中的任何代码,但是在更新之前一切正常。在Swift 5发行说明中,我也通常找不到手势,委托或ScrollView的任何更改。
Swift 5编译器似乎是一个错误。此外,有时它确实起作用,有时却不起作用-所有这些都无需更改任何代码或项目设置。
为什么这不再起作用?有没有其他人经历过类似的行为?
我isLoggedIn在 ObservableObject 类中有一个已发布的变量,如下所示:
import Combine
class UserAuth: ObservableObject{
@Published var isLoggedIn: Bool = false
}
Run Code Online (Sandbox Code Playgroud)
我想在特定视图 (LoginView) 中将此变量更新为 true。此变量决定了我向用户显示的视图,具体取决于用户是否已登录:
struct ContentView: View {
@ObservedObject var userAuth = UserAuth()
var body: some View {
Group{
if(userAuth.isLoggedIn){
MainView()
}else{
AccountView()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为userAuth.isLoggedIn是false(我还没登录)AccountView就显示出来了。
账户视图:
struct AccountView: View {
@State private var toggleSheet = false
var body: some View {
VStack {
Spacer()
Button(action: {
self.toggleSheet.toggle()
}){
Text("Toggle Modal")
.padding()
.foregroundColor(Color.white)
.background(Color.blue)
.cornerRadius(10)
}
.sheet(isPresented: self.$toggleSheet){
LoginView()
}
Spacer() …Run Code Online (Sandbox Code Playgroud) 假设我们有以下目标:
\n所以具体的问题是:我们如何才能使 Swift actor 遵守协议,同时保持隔离?
\nprotocol Zippity {\n func foo()\n}\n\nactor Zappity: Zippity {\n func foo() {} // Doesn\'t compile\n}\nRun Code Online (Sandbox Code Playgroud)\n我可以用 \xe2\x80\xa6 编译它
\nactor Zappity: Zippity {\n nonisolated func foo() {}\n}\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6 但这似乎违背了目的。我还尝试声明接口方法async,但也无法编译。
我可以想到几种合理的解决方法,包括组合、nonisolated async调用独立方法的方法等,但想看看是否有我遗漏的东西。
从Swift 5开始,@unknown引入了新的case属性。
@unknown使用和不使用时的确切区别是什么?在这种情况下,我们必须使用@unknown关键字?
我想在 SwiftUI 中的形状(例如方形)中添加文本(例如 Hi)并使它们充当单个对象。
看起来没有直接的方法可以在 SwiftUI 中添加形状中的文本。
我以前从未得到过这个,Swift 中此错误消息的含义是什么:
No exact matches in call to instance method 'dataTask(with:completionHandler:)'
Run Code Online (Sandbox Code Playgroud)
这是我的代码块:
var request: NSMutableURLRequest? = nil
let task = URLSession.shared.dataTask(
with: request,
completionHandler: { data, response, error in
DispatchQueue.main.async(execute: {
/// ...
})
})
task.resume()
Run Code Online (Sandbox Code Playgroud)
通过feedbackassistant.apple.com 报告:
let elements: [(Int?, Int?)] = [(1, 2), (2, 1), (3, nil), (nil, 3), (5, 6), (6, 5)]
let result = elements.filter { $0.0 != nil } as! [(Int, Int?)]
Run Code Online (Sandbox Code Playgroud)
有没有更干净的方法来获得部分非可选类型?没有强制解包......
当我们过滤掉 nils 时,编译器应该很明显我们会得到一些非可选的东西。就像我们应用 compactMap 的情况一样。
我想SecRandomCopyBytes在Swift 3.0中使用生成随机字节.这是我在Swift 2.2中的表现
private static func generateRandomBytes() -> String? {
let data = NSMutableData(length: Int(32))
let result = SecRandomCopyBytes(kSecRandomDefault, 32, UnsafeMutablePointer<UInt8>(data!.mutableBytes))
if result == errSecSuccess {
return data!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
} else {
print("Problem generating random bytes")
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3中,我尝试这样做,因为我知道unsafemutablebytes的概念现在不同了,但它不允许我返回.如果我评论退货部分,它仍然说Generic Parameter ResultType could not be inferred
fileprivate static func generateRandomBytes() -> String? {
var keyData = Data(count: 32)
_ = keyData.withUnsafeMutableBytes {mutableBytes in
let result = SecRandomCopyBytes(kSecRandomDefault, keyData.count, mutableBytes)
if result == errSecSuccess { …Run Code Online (Sandbox Code Playgroud) 我昨天升级到Xcode 10.2,并开始使用Swift 5,当出现UIAlertController照片提示时会注意到此错误。我不记得在Xcode 10.1中看到过
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001321e00 UIView:0x7fe1246070a0.width == - 16 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
Run Code Online (Sandbox Code Playgroud)
我读过此问题如何捕获UIViewAlertForUnsatisfiableConstraints?
并能够将错误定位到我的位置UIAlertController(以红色突出显示)
这是我的代码:
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600001321e00 UIView:0x7fe1246070a0.width == - 16 (active)>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
Run Code Online (Sandbox Code Playgroud)
我试图UIAlertController通过在我的promptPhoto()方法内部使用此代码来设置宽度,但无济于事。
@objc private func promptPhoto() {
let prompt = UIAlertController(title: "Choose a Photo",
message: …Run Code Online (Sandbox Code Playgroud)