我有一个泛型类,我希望能够使用默认类型.现在我可以用任何类型初始化它,但我必须明确.
//Initialize with a type
MyManager<MyCustomerObject>()
// Initialize with NSObject (what I want to be my default type)
MyManager<NSObject>()
// This doesn't work, but I want this kind of functionality
class MyManager<T = NSObject> {}
// So I can create my manager like so and it inserts the default type as NSObject
MyManager() //Or MyManager<>()
Run Code Online (Sandbox Code Playgroud)
这在Swift中可能吗?
我正在_clang-format使用BBUncrustifyPluginfor Xcode 运行文件.
在Xcode中,每当我创建换行符时,它都会保留缩进空格.(空格显示为•)像这样:
if(YES) {
••••NSInteger myNum = 2;
••••
••••myNum = 4;
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的_clang-format文件时,它会从我的代码中删除空格,所以它现在看起来像这样:
if(YES) {
••••NSInteger myNum = 2;
••••myNum = 4;
}
Run Code Online (Sandbox Code Playgroud)
这并不是什么大不了的事,但它确实会导致每个换行符删除空格的烦人提交更改.更不用说如果我回去编辑文件,我希望那些空间已经存在.
我似乎找不到_clang-format可以帮助我解决这个问题的密钥.有帮助吗?
这是我当前的_clang-format文件
BasedOnStyle: Chromium,
AlignTrailingComments: true,
BreakBeforeBraces: Linux,
ColumnLimit: 140,
IndentWidth: 4,
KeepEmptyLinesAtTheStartOfBlocks: false,
ObjCBlockIndentWidth: 4,
ObjCSpaceAfterProperty: true,
ObjCSpaceBeforeProtocolList: true,
PointerBindsToType: false,
SpacesBeforeTrailingComments: 1,
TabWidth: 8,
MaxEmptyLinesToKeep: 2,
UseTab: Never,
Run Code Online (Sandbox Code Playgroud)
谢谢.
当我print()在Swift中使用字典时,它在控制台中显得漂亮而美观,带有键和值.
object = Optional({
customerId = 111;
transactionId = 333;
extraId = 444;
})
Run Code Online (Sandbox Code Playgroud)
当我po在同一个字典上运行时,它会吐出这个无意义的转储,这非常难以阅读.
? Optional<Any>
? some : 3 elements
? 0 : 2 elements
? .0 : transactionId
- .1 : 333
? 1 : 2 elements
? .0 : customerId
- .1 : 111
? 2 : 2 elements
? .0 : extraId
- .1 : 444
Run Code Online (Sandbox Code Playgroud)
使用p就更糟糕了
(Any?) $R8 = some {
payload_data_0 = 0x0000000170e679c0 {
Swift._SwiftNativeNSDictionary = {} …Run Code Online (Sandbox Code Playgroud) 我需要帮助找出在我的应用程序中后台执行的代码.如果我在我的应用程序中运行仪器中的活动监视器,即使按下主页按钮后它也会始终使用大约1%的CPU.
这是,我假设,一旦它的backgroundTimeRemaining已经过期,就会导致iOS将我的应用程序从暂停状态踢出.即使在显然没有发生任何事情的屏幕上,即使我只是让手机睡了几分钟,应用程序仍会使用CPU时间并被踢出暂停状态.
我已经在我的应用程序中完成了对NSTimers的项目范围搜索,以确保在我离开应用程序后没有任何内容被解雇,并且在应用程序接收网络消息的热门地点放置断点,但似乎没有被击中
我已经确认当它没有连接到调试器时仍然会发生这种情况,当我按下主页按钮时,其他应用程序似乎变为0或更接近0 CPU利用率.
什么工具可以帮助我实现目标并找出后台运行的代码?
编辑1:在Petesh的评论之后,我更多地使用了仪器中的Time Profiler,并发现我可以设置检测范围,并在我将应用程序置于挂起状态后仅查看代码运行.我找到了一些不应该运行的代码,我修复了它,但是应用程序在几分钟后仍然被踢出暂停状态!
活动监视器现在只显示0.1-0%的CPU使用率,而应用程序是后台运行的.再次运行Time Profiler会发现,我认为唯一运行的是主运行循环.在后台约一个小时的时间277毫秒.如果我检查"反转调用树"框,则显示时间主要花费在mach_msg_trap上,总时间为46毫秒.我不确定这是否是正常行为.
我已经解决了我的一些问题,但最重要的部分仍然存在.什么阻止我的应用程序停留在暂停状态?
编辑2(固定!):经过深入挖掘后,我找到了罪魁祸首.第三方库正在调用beginBackgroundTaskWithExpirationHandler:,然后endBackgroundTask:在完成时从不调用.因此,我相信iOS认为该应用程序仍在尝试执行后台任务,并且在某个后台时间结束后,即使它没有真正做任何事情,它也终止了应用程序.
仪器中的活动监视器现在在初始后台代码运行后的整个时间内确实显示0%.
自从我第一次提出这个问题以来,我不确定是不是这个或者是我修复的所有东西的组合,但无论哪种方式,它都是固定的!
编辑3:经过更多研究后我发现它实际上不是第三方库的错.该库正在侦听applicationDidEnterBackground通知,因此它可以刷新它的队列.但是在我们自己的applicationDidEnterBackground中,我们还有一个强制刷新队列.因此,它尝试两次启动后台任务,只完成一次.哎呀!
在我的 iPhone XS 上,我在控制中心创建了一个快捷方式来快速更改文本大小并测试以确保所有大小都适用于我的 iPhone。
但是,我经常在模拟器中尝试测试,需要切换到设置应用程序并通过多个菜单来切换文本大小很乏味。
由于模拟器没有 Control Center,是否还有其他方法可以更轻松地更改文本大小?
我的一个对象有一个整数ID.由于这是一个必需的属性,我没有将它定义为可选,我要求它在指定的初始化程序中:
class Thing {
var uniqueID: Int
var name: String?
init (uniqueID: Int) {
self.uniqueID = uniqueID
}
}
Run Code Online (Sandbox Code Playgroud)
由于我是从一些JSON创建其中一个,因此用法如下:
if let uniqueID = dictionary["id"] as? Int {
let thing = Thing(uniqueID: unique)
}
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,我希望对我到目前为止所做的事情进行健全检查).
接下来,我希望能够为Thing类添加一个便利初始化器,它接受字典对象并相应地设置属性.这包括必需uniqueID和一些其他可选属性.到目前为止,我的最大努力是:
convenience init (dictionary: [String: AnyObject]) {
if let uniqueID = dictionary["id"] as? Int {
self.init(uniqueID: uniqueID)
//set other values here?
}
//or here?
}
Run Code Online (Sandbox Code Playgroud)
但是当然这还不够,因为没有在条件的所有路径上调用指定的初始值设定项.
我该如何处理这种情况?它甚至可能吗?或者我应该接受uniqueID必须是可选的?
由于Swift文件没有标题,因此它很快就会变得混乱,很难看到代表该文件/类接口的方法public和internal方法.
Xcode实际上生成了一个接口文件,可以通过单击Assistant Editor,然后选择Counterparts类型找到该接口文件,您将看到MySwiftFile.swift (Interface)可以检出的文件.
有谁知道更简单的方法来访问此接口文件?也许有捷径?我似乎无法使用Cmd + Shift + O或其他方法找到它.
我在一个支持Xcode 8和Xcode 9的开发团队中。
我正在开发String.UTF16Index(range.location)Xcode 8 中使用的功能。当我升级到Xcode 9时,会导致错误'init' is deprecated。
因此,在Xcode 9中,我将其更改为UTF16Index.init(encodedOffset: range.lowerBound)。但是,现在在error的Xcode 8中不起作用Argument labels '(encodedOffset:)' do not match any available overloads。
即使我可以检查Xcode版本并编写不同的代码,其中的一行也会在编译时失败。我该如何处理?还是我一直等到我们完全迁移到Xcode 9之前?
英文日期字符串: Jan 18 - Jan 26, 2018
韩语日期字符串不正确: Jan 18 - 2018 Jan 26
在韩语中会发生什么:( 2018 Jan 18 - Jan 26不完全正确的韩语,只是指年份的位置.请参阅接受的答案以查看正确的韩语日期格式)
现在这需要格式化日期,但您必须硬编码哪个日期格式化程序具有年份,因此朝鲜日期看起来不正确.
这可以在Swift/Objc中完成而不只是将年份字符串放在日期范围的两边吗?
swift ×6
ios ×4
xcode ×4
clang-format ×1
cpu-usage ×1
date ×1
debugging ×1
deprecated ×1
generics ×1
iphone ×1
localization ×1
optional ×1
text-size ×1