小编Den*_*eny的帖子

如何禁用导航栏中的后退按钮

有没有官方的方法如何设置UIBarButtonItem.enabled财产?我试图在以前的控制器中设置backButtonItem.但enabled财产被忽略了.

更多这个简单的示例项目.

我不想像"制作你自己的leftBarButtonItem并设置它的alpha ......"这样的解决方案.

编辑:我不想隐藏它,只是用暗灰色禁用它并禁用用户交互.这与禁用的行为完全相同leftBarButtonItem.

storyboard ios swift

36
推荐指数
3
解决办法
3万
查看次数

Swift并使用类扩展

我不明白为什么程序员extension在他们的类实现中使用关键字.您可以阅读其他主题,然后代码在语义上更加分离等等.但是当我使用自己的代码时,我觉得使用它会更清晰// MARK - Something.然后当你在Xcode中使用方法列表(ctrl + 6)时,一切都会在第一眼看到.

在Apple文档中,您可以阅读:

"扩展程序为现有的类,结构或枚举类型添加了新功能."

那么为什么不直接在我自己的类中编写我自己的代码呢?不像我想扩展一些外国类的功能,比如,NSURLSession或者Dictionary,你必须使用扩展.

Mattt Thompson在他的Alamofire图书馆中使用扩展,也许他可以给我一点解释,为什么他选择这种方法.

class class-extensions swift alamofire

14
推荐指数
2
解决办法
3472
查看次数

在执行整个init方法之前调用viewDidLoad

编辑:这是Xcode 6.4的完整代码示例

我有简单的iOS应用程序没有故事板.我设置rootViewControllerUIWindowAppDelegate.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)

init uitabbarcontroller viewdidload ios swift

13
推荐指数
2
解决办法
4845
查看次数

同时使用CocoaPods与框架和静态库

我的项目中有这个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)

frameworks static-libraries ios cocoapods swift

7
推荐指数
1
解决办法
1513
查看次数

Swift 中的断言

我在 Swift 中测试了断言,但我有点困惑。你能解释一下assert,assertionFailurefatalError函数之间的区别吗?

我知道@noreturn属性(由 Seven Oglesby很好地解释了),但我不明白,这些函数什么时候被评估,什么时候被忽略。

函数assert并且fatalError仅在调试模式下发生,我测试了这种行为,这是真的。但assertionFailure也会在发布配置中停止程序。在文档中保持:

发生致命错误,程序执行应在调试模式下停止。在优化的构建中,这是一个 noop。

然后我不明白,为什么不忽略在非调试模式下对该方法的评估。有没有人有任何经验?

assert assertions swift

4
推荐指数
1
解决办法
2110
查看次数

泛型类型约束与继承

这两个函数声明之间有区别吗?

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的子类....

那么在哪种情况下使用上述通用功能会更好?

generics inheritance ios swift

2
推荐指数
1
解决办法
328
查看次数