有没有官方的方法如何设置UIBarButtonItem.enabled财产?我试图在以前的控制器中设置backButtonItem.但enabled财产被忽略了.
更多这个简单的示例项目.
我不想像"制作你自己的leftBarButtonItem并设置它的alpha ......"这样的解决方案.
编辑:我不想隐藏它,只是用暗灰色禁用它并禁用用户交互.这与禁用的行为完全相同leftBarButtonItem.
我不明白为什么程序员extension在他们的类实现中使用关键字.您可以阅读其他主题,然后代码在语义上更加分离等等.但是当我使用自己的代码时,我觉得使用它会更清晰// MARK - Something.然后当你在Xcode中使用方法列表(ctrl + 6)时,一切都会在第一眼看到.
在Apple文档中,您可以阅读:
"扩展程序为现有的类,结构或枚举类型添加了新功能."
那么为什么不直接在我自己的类中编写我自己的代码呢?不像我想扩展一些外国类的功能,比如,NSURLSession或者Dictionary,你必须使用扩展.
Mattt Thompson在他的Alamofire图书馆中使用扩展,也许他可以给我一点解释,为什么他选择这种方法.
编辑:这是Xcode 6.4的完整代码示例
我有简单的iOS应用程序没有故事板.我设置rootViewController为UIWindow在AppDelegate.swift这样的:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let tabBarController = TabBarController()
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.rootViewController = tabBarController
window?.makeKeyAndVisible()
return true
}
Run Code Online (Sandbox Code Playgroud)
TabBarController 类的实现如下:
class TabBarController: UITabBarController {
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
// Next line is called after 'viewDidLoad' method
println("init(nibName: bundle:)")
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad() …Run Code Online (Sandbox Code Playgroud) 我的项目中有这个Podfile:
platform :ios, '8.0'
use_frameworks!
target 'FunnyApp' do
pod 'Alamofire', '~> 1.2'
pod 'SWXMLHash', '~> 1.0'
pod 'VaultKit', :path => './Frameworks/VaultKit'
pod 'SessionKit', :path => './Frameworks/SessionKit'
end
Run Code Online (Sandbox Code Playgroud)
只有VaultKit是用Objective-C编写的静态库.它有这个podspec:
Pod::Spec.new do |s|
s.name = 'VaultKit'
s.version = '0.1'
s.license = 'MIT'
s.summary = 'Encryption library'
s.homepage = 'https://someurl.com'
s.social_media_url = 'http://twitter.com/greenfish29'
s.authors = { 'Tomas Sliz' => 'greenfish29@email.com' }
s.source = { :git => 'git@github.org:greenfish29/vaultkit.git' }
s.ios.deployment_target = '8.0'
s.public_header_files = 'VaultKit/VaultKit.h'
s.source_files = "VaultKit/*.{h,m}" "VaultKit/Models/*.{h,m}"
s.requires_arc …Run Code Online (Sandbox Code Playgroud) 我在 Swift 中测试了断言,但我有点困惑。你能解释一下assert,assertionFailure和fatalError函数之间的区别吗?
我知道@noreturn属性(由 Seven Oglesby很好地解释了),但我不明白,这些函数什么时候被评估,什么时候被忽略。
函数assert并且fatalError仅在调试模式下发生,我测试了这种行为,这是真的。但assertionFailure也会在发布配置中停止程序。在文档中保持:
发生致命错误,程序执行应在调试模式下停止。在优化的构建中,这是一个 noop。
然后我不明白,为什么不忽略在非调试模式下对该方法的评估。有没有人有任何经验?
这两个函数声明之间有区别吗?
func doSomething<T: UIViewController>(controller: T) {...}
Run Code Online (Sandbox Code Playgroud)
与
func doSomething(controller: UIViewController) {...}
Run Code Online (Sandbox Code Playgroud)
在Apples Swift编程语言书的Type Constraint Syntax部分中,有以下代码示例:
func? ?someFunction?<?T?: ?SomeClass?, ?U?: ?SomeProtocol?>(?someT?: ?T?, ?someU?: ?U?) {
// function body goes here
}
Run Code Online (Sandbox Code Playgroud)
有了这个描述:
上面的假设函数有两个类型参数.第一个类型参数T有一个类型约束,要求T是SomeClass的子类....
那么在哪种情况下使用上述通用功能会更好?
swift ×6
ios ×4
alamofire ×1
assert ×1
assertions ×1
class ×1
cocoapods ×1
frameworks ×1
generics ×1
inheritance ×1
init ×1
storyboard ×1
viewdidload ×1