有没有办法让导航控制器的栏完全透明?
我尝试过的:
[self.navigationController.navigationBar setBackgroundColor:[UIColor clearColor]];
[self.navigationController.navigationBar setBarTintColor:[UIColor clearColor]];
[self.navigationController.navigationBar setAlpha:0.0];
Run Code Online (Sandbox Code Playgroud)
但酒吧的外观不会改变,并保持白色半透明.我试图看到酒吧项目,但不是酒吧本身.有人能指出我正确的方向吗?谢谢
是否可以使用"块类型"的静态变量?
我有一个只在静态方法中做的东西.执行那些我打电话的方法statusChangedBlock.为此,我创建了一个类的共享实例,并使用其单个块属性.我想知道是否有可能有一个静态块变量; 所以我不必创建一个具有单个属性的实例,只是为了通知我的状态已更改.
我知道有一个NSNotification的选项,但我不喜欢使用它,但有一些罕见的例外.
......这个问题听起来有些愚蠢,我不知道为什么.我希望有人指出这一点.
简而言之:快速/便宜吗?将NSUserDefaults中的值存储在内存中以便更快地访问是否有意义?
更长:说,我有大量的值要存储和读取NSUserDefaults; 需要经常访问(读取)这些值.
在下面的代码片段中,我初始化一个私有存储属性,并保持与相应的NSUserDefaults值同步 - 所以当我需要读取它时,我读取了属性.
如果直接读取默认值实际上很快,我显然会删除私有财产.但我不确定.它快吗?
private var _loggedIn = NSUserDefaults.standardUserDefaults().boolForKey("loggedIn")
public var loggedIn: Bool {
get {
return _loggedIn
}
set {
_loggedIn = newValue
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "loggedIn")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
Run Code Online (Sandbox Code Playgroud)
对未来读者的澄清:问题是关于阅读,而不是写作/同步,这是(如答案中所指出的)不快速也不便宜.
.synchronize()在setter中调用是有正当理由的 - 在我的特定情况下,让它立即同步是很重要的,所以我牺牲性能来保持逻辑完整性.在一般情况下,您应该考虑是否需要调用它 - 或者让系统选择适当的写入时间.
..In事实上,现在我看,我看到保持存储的属性,因为它是在片段中,将提供逻辑完整性(从其他地方只要获得通过吸气发生,从userDefaults不是直接).所以我也可以synchronizing在这里避免.
(如果有人可以提出更好的标题,请这样做)
以下代码不会编译出错Type 'ObserverClass' does not conform to protocol 'Observer',编译器通过声明var object: ObservedObject.
class ObservedObject {}
class ObservedObjectSubclass: ObservedObject {}
protocol Observer {
var object: ObservedObject { get }
}
class ObserverClass: Observer { // Type 'ObserverClass' does not conform to protocol 'Observer'
// suggested:
// var object: ObservedObject
var object: ObservedObjectSubclass = ObservedObjectSubclass()
}
Run Code Online (Sandbox Code Playgroud)
我的看法是 -ObservedObjectSubclass 是 ObservedObject,所以object财产保证是ObservedObject协议要求的类型。
(同样如此,如果使用协议一致性而不是子类化 - 下面)
protocol ObservedObjectProtocol {}
protocol Observer {
var object: ObservedObjectProtocol { …Run Code Online (Sandbox Code Playgroud)