我怎么能让我的代码等到DispatchQueue中的任务完成?它需要任何CompletionHandler或其他东西吗?
func myFunction() {
var a: Int?
DispatchQueue.main.async {
var b: Int = 3
a = b
}
// wait until the task finishes, then print
print(a) // - this will contain nil, of course, because it
// will execute before the code above
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Xcode 8.2并在Swift 3中编写.
multithreading asynchronous grand-central-dispatch swift swift3
尽量不要笑或哭 - 我只是在20年后重新开始编码......
我花了4个多小时查看引用并尝试使用代码片段来获取Bundle.main.path来打开我的文本文件所以我可以读取我的应用程序的数据(我的下一步是适当地解析它).
if let filepath = Bundle.main.path(forResource: "newTest", ofType: "txt")
{
do
{
let contents = try String(contentsOfFile: filepath)
print(contents)
}
catch
{
print("Contents could not be loaded.")
}
}
else
{
print("newTest.txt not found.")
}
Run Code Online (Sandbox Code Playgroud)
结果是:"找不到newTest.txt." 无论我如何尝试将文件拖放到项目中,在Xcode中创建文件或使用文件 - >添加文件到...菜单项.
我在调试器中收到一条消息:
LLDB RPC服务器已崩溃.崩溃日志位于〜/ Library/Logs/DiagnosticReports中,前缀为"lldb-rpc-server".请提交错误并附上最新的崩溃日志.
在为不同的目标构建我的项目时,我收到此错误:
无法确定生成Core Data代码的生成文件路径:Error Domain = NSCocoaErrorDomain Code = 260"path /Users/abc/Documents/Code/xyz-ios/ABC/iPhoneXMPP/SRT/Model.xcdatamodeld中没有当前版本的模型: "UserInfo = {NSFilePath =/Users/abc/Documents/Code/xyz-ios/ABC/iPhoneXMPP/SRT/Model.xcdatamodeld,NSLocalizedDescription =在路径/ Users/abc/Documents/Code/xyz-ios中没有模型的当前版本/ABC/iPhoneXMPP/SRT/Model.xcdatamodeld:}
错误提到的路径是"
/Users/abc/Documents/Code/xyz-ios/ABC/iPhoneXMPP/SRT/Model.xcdatamodeld
"但是"SRT"文件夹位于我的文件夹结构中的"Temp"文件夹中.如何解决此问题?
我正在研究iOS的框架,它带有一些数据文件.要将它们加载到Dictionary
我做这样的事情:
public func loadPListFromBundle(filename: String, type: String) -> [String : AnyObject]? {
guard
let bundle = Bundle(for: "com.myframework")
let path = bundle.main.path(forResource: filename, ofType: type),
let plistDict = NSDictionary(contentsOfFile: path) as? [String : AnyObject]
else {
print("plist not found")
return nil
}
return plistDict
}
Run Code Online (Sandbox Code Playgroud)
如果我在带有框架的游乐场中使用它,它可以按预期工作.
但是,如果我使用嵌入在应用程序中的框架,它不再起作用,"路径"现在指向应用程序的捆绑,而不是框架.
如何确保访问框架的捆绑包?
编辑:上面的代码驻留在框架中,而不是在应用程序中.
EDIT2:上面的代码是一个实用函数,不是结构或类的一部分.
这是代码摘录:
func mapping(map: Map) {
time <- (map["time"], TransformOf<Date, String>(fromJSON: {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
//dateFormatter.timeZone = TimeZone(abbreviation: "EEST")
if let argument = $0 {
let date = dateFormatter.date(from: argument)
return dateFormatter.date(from: argument)
}
return nil
}}
Run Code Online (Sandbox Code Playgroud)
$0
是字符串"22:12:00"
.我把"让日期"看看它返回的是什么,它是零.我在这里查找格式代码:http://waracle.net/iphone-nsdateformatter-date-formatting-table/
代码应该实际工作.我究竟做错了什么?
编辑:添加了整个功能
EDIT2:我刚刚注意到它在iPhone 7 iOS 10.1模拟器上运行正常但在我的iPod 10.1.1(2016)上返回nil.这太奇怪了.
我正在努力尝试在我的集合视图中使用每个部分的标题执行多个部分.我不知道Obj-C,我已经找到了很多教程,但还是没能弄清楚如何将它转换成Swift.
我的所有数据都是静态的,所以我需要的是某种类型的数组或字典,我可以使用它来创建多个部分.我已经有一个包含1个部分的集合视图,所以如果您有多个部分的见解或代码可以提供帮助.
我知道如何设置多个部分
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return sectionData.count
}
Run Code Online (Sandbox Code Playgroud)
我认为我需要帮助的主要是实现这个功能
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { }
Run Code Online (Sandbox Code Playgroud)
并设置数据!
UICollectionView和UITableView几乎完全相同,所以如果你知道如何在Swift的UITableView中做多个部分,你的帮助也很感激
我有一个Xcode项目,Xcode 8.1(8B62)有两个目标,一个用于付费版本的应用程序,另一个用于免费版本.他们都管理遥控器推送通知.由于我使用新的框架UNUserNotificationCenter.framwork对iOS 10进行了更改,因此第一个目标的一切都很好,而第二个目标的链接错误.它使用旧方法在iOS 9下运行良好.我为两个目标做了什么:
这两个目标的代码相同.
不幸的是,对于第二个目标,我有以下错误:
架构arm64的未定义符号:"_ OBJC_CLASS _ $ _ UNUserNotificationCenter",引自:AppDelegate.o中的Objc-class-ref Ld:未找到架构的符号Clang:错误:链接器命令失败,退出代码为1(使用 - v看看调用)
我已经做过几次干净整洁的构建目标文件夹,重新启动Xcode,重新启动计算机但没有做任何事情.
在不同的论坛中找不到任何东西......
欢迎帮助.先感谢您.
有没有什么方法可以指定断点来停止所有'throw'语句?(符号断点)
guard let id = UInt(idString),
let changeset = UInt(changesetString),
let uid = UInt(uidString)
else {
throw OSMVectorMapDescriptionError.ElementAttributeConversionError(element: xmlNode, attributeº: nil)
}
Run Code Online (Sandbox Code Playgroud) 我有以下Swift 4 Codable
类,它继承自Realm的Object类型:
final class SearchResult: RealmSwift.Object, Codable {
@objc dynamic var name: String = ""
@objc dynamic var region: String = ""
enum CodingKeys: String, CodingKey {
case name = "name"
case region = "region"
}
}
Run Code Online (Sandbox Code Playgroud)
这里的期望是该init(from decoder: Decoder)
方法被合成,所以我不必自己实现它,这是一个巨大的便利.但是,不实现这会产生以下编译器错误:
super.init isn't called on all paths before returning from initializer
有三种方法可以摆脱编译器错误,但没有一种方法是好的:
实现一个init(from decoder: Decoder)
只调用的空方法super.init()
.这似乎阻止了合成,意味着没有任何实际解码,因为它只是一个空方法.
init(from decoder: Decoder)
手动实现整个方法.这有效,但现在使用的乐趣Codable
几乎消失了.
删除所有与Realm相关的代码.现在Codable按预期工作,但是,现在我不能再使用Realm了.
这对我来说似乎是一个Swift错误,因为它应该检测到init(from decoder: Decoder)
实际上是在实现,而不是手动执行.
我不知道的任何建议或解决方法?