在Objective-C中,以下代码生成Unused变量警告:
- (void)viewDidLoad {
[super viewDidLoad];
NSInteger unusedVariable;
}
Run Code Online (Sandbox Code Playgroud)
但在Swift中,以下相同的代码不会生成警告:
override func viewDidLoad() {
super.viewDidLoad()
var unusedVariable: Int
}
Run Code Online (Sandbox Code Playgroud)
Xcode版本是6.0.1.
Swift项目中的Build Settings> Unused Variables为YES.
这只发生在我身上吗?
如何让Swift或Xcode在Swift中生成未使用的变量警告?
我有使用UIActionSheet和的应用程序UIAlertView.
在iOS8中,Apple的文档和一些网站称它们在iOS8中被弃用.
UIActionSheet文档
重要:在iOS 8中不推荐使用UIActionSheet.(请注意,UIActionSheetDelegate也已弃用.)要在iOS 8及更高版本中创建和管理操作表,请使用UIAlertController和UIAlertControllerStyleActionSheet的preferredStyle.
但是在Xcode 6中,部署目标8.0不会生成使用UIActionSheet和的警告UIAlertView.
通常,Xcode会为不推荐使用的API生成警告.
为什么Xcode没有为UIActionSheet和生成警告UIAlertView?
这是否意味着Apple实际上并没有弃用这些类?
如果他们实际上弃用它们并且Xcode不生成警告,则非常危险.
在另一个苹果的文档"iOS 8.0中的新功能"中说:
新
UIAlertController类将替换UIActionSheet和UIAlertView类作为在应用程序中显示警报的首选方式.https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS8.html
而UIActionSheet与UIAlertView未上市的已过时的API上面URL的文档部分.
所以,这意味着文件UIAlertController是首选的,但UIActionSheet并UIAlertView还可以买到在IOS 8.
我应该替换UIActionSheet和UIAlertView我的应用程序与新的UIAlertController班?
或者,我可以继续使用UIActionSheet和UIAlertView?
在iOS中,可以通过设置更改播放速率AVPlayer.rate。当AVPlayback rate设置为0.5时,播放会变慢。
默认情况下,以0.5播放速率播放的声音质量很差。要提高质量,您需要设置AVPlayerItem.audioTimePitchAlgorithm。
根据API文档,将设置AVPlayerItem.audioTimePitchAlgorithm为AVAudioTimePitchAlgorithmSpectral使质量最高。
快速代码是:
AVPlayerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithm.spectral // AVAudioTimePitchAlgorithmSpectral
Run Code Online (Sandbox Code Playgroud)
AVAudioTimePitchAlgorithmSpectral增加的质量比默认质量更多。但是的音质AVAudioTimePitchAlgorithmSpectral不够好。声音仍在回响,聆听它的压力很大。
在Apple的Podcast App中,当我将播放速度设置为1/2时,播放速度变慢并且声音质量很高,根本没有回音。
我希望我的应用提供与Apple的Podcast应用相同的质量。
是否有iOS API可以提高音质AVAudioTimePitchAlgorithmSpectral?
如果没有,即使他们在自己的Podcast应用中使用它,为什么Apple不提供它?
还是应该使用第三方库?有没有免费或低价的好图书馆,很多人用来改变播放速度?
我想将iPhone应用程序的用户设置文件保存在〜/ Library /目录中。
我不想使用〜/ Documents /目录,因为我不希望用户使用文件共享功能查看或修改iTunes中的文件。
但是有4种选择可以将文件保存在〜/ Library /中:
1.〜/ Library / some-data.plist
这使用Library /目录而不在其中创建子目录。
(API常量名称是NSLibraryDirectory)2.〜
/ Library / MyAppName / some-data.plist
这使用Library /目录和一个子目录,该名称是我的应用程序的名称。
3.〜/ Library / Application Support / some-data.plist
这使用Application Support /目录而不在其中创建子目录。
(API常量名称为NSApplicationSupportDirectory)
4.〜/ Library / Application Support / MyAppName / some-data.plist
这使用Application Support /目录和一个子目录,该目录是我的应用程序的名称。
问题
上面每条路径的优缺点是什么?
您将应用程序的数据保存在Library /中的什么位置?
我应该使用〜/ Library /还是〜/ Library / Application Support /?
我应该创建一个子目录还是不应该创建它?
如果我应该创建一个子目录,将应用程序的名称用于子目录是否是一种好习惯?
还是子目录有更好的名称?
例如,在Objective-C中,如果Apple添加了一个名为method1UIView的新方法,那么已经发布到App Store并使用以下代码的现有应用程序可能会崩溃或出现意外行为:
// Objective-C
@interface MyView : UIView
- (void)method1;
@end
// Swift
class MyView : UIView {
func method1() {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
但是在Swift中,要覆盖一个方法,你需要一个override关键字来防止意外覆盖.如果覆盖不带override关键字的方法,编译器将生成编译时错误.
如果Apple在下一个iOS版本中添加新的API方法,并且我的应用程序或您的应用程序使用的名称与新API名称相同的方法,将会发生什么.
在Swift中,现有应用程序(如Objective-C)中的方法是否会覆盖新的API方法?
或者,由于Swift的显式覆盖功能(override关键字),新的API不会影响现有的同名用户定义方法?
我有一个应用程序,其版本号为1.0.0,并且已在App Store上提供。
我可以将应用程序下一版本的版本号设置为3.0.0或4.0.0而不是2.0.0吗?
如果版本号不是连续的,我会遇到问题吗?
是否有关于此的官方文档,或者您知道使用非顺序版本号的应用程序或初始版本以大于1的数字开头的应用程序吗?
有些网站建议使用延迟初始化而不是使用故事板来初始化视图.
它self在惰性初始化中不使用时有效.但是当self在其中使用时,会发生编译错误.
例如,在下面的代码中,label1可以成功编译,但label2不能,因为self在其中使用.
如何self在延迟初始化中使用?
class A {
private let label1: UILabel = {
return UILabel()
}()
private let label2: UILabel = {
let view = UILabel()
self.addTextToLabel(view) // compile error !!!
return view
}()
private func addTextToLabel(label: UILabel) {
label.text = "test"
}
}
Run Code Online (Sandbox Code Playgroud) ios ×6
iphone ×5
swift ×4
xcode ×4
objective-c ×2
cocoa-touch ×1
deprecated ×1
ios8 ×1
uialertview ×1