小编ton*_*ran的帖子

Swift中的纯类协议

我希望我的一些课程(不是全部)能够使用docs中的"Class-Only Protocols".我在做什么

protocol RefreshData: class, ClassA, ClassB
{
    func updateController()
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误

non class type 'RefreshData cannot inherit from classA
non class type 'RefreshData cannot inherit from classB
Run Code Online (Sandbox Code Playgroud)

我不确定我是否完全遵循文档.有没有人对此有任何想法?

protocols ios conform swift swift2

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

进入前台后刷新数据

更改默认设置后,我想在AppDelegate中输入前景时刷新myViewController的数据.我做的是

AppDelegate.m

- (void)applicationDidFinishLaunching:(UIApplication *)application
{
    [window addSubview:[navigationController view]];
    NSLog(@"APPLICATION DID FINISH LAUNCHING");
    // listen for changes to our preferences when the Settings app does so,
    // when we are resumed from the backround, this will give us a chance to update our UI
    //
    [[NSNotificationCenter defaultCenter] addObserver:self
                                       selector:@selector(defaultsChanged:)
                                           name:NSUserDefaultsDidChangeNotification
                                         object:nil];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    /*
     Called as part of the transition from the background to the active state; here you can undo many of the changes made on …
Run Code Online (Sandbox Code Playgroud)

iphone ios

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

来自equatable协议的func ==不适用于自定义对象,swift

我的目标是显示历史登录的用户列表(例如用户名)(如果有).为了做到这一点,我正在做

1. Create an custom object named User like below

 class User: NSObject
    {
        var login: String

        init(login: String)
        {
            self.login = login
        }
        required init(coder aDecoder: NSCoder) {
            login = aDecoder.decodeObjectForKey("login") as! String
        }

        func encodeWithCoder(aCoder: NSCoder) {
            aCoder.encodeObject(login, forKey: "login")
        }
    }

    // This conform to make sure that I compare the `login` of 2 Users
    func ==(lhs: User, rhs: User) -> Bool
    {
        return lhs.login == rhs.login
    }
Run Code Online (Sandbox Code Playgroud)

在的UserManager,Im做saveretrieveUser.在保存之前,我正在检查历史记录登录列表是否包含a User,我不会添加它,否则. …

ios swift equatable

6
推荐指数
1
解决办法
1109
查看次数

协议扩展,不符合协议

我正在创建一个名为contains的框架MyFramework,LoginProtocol.swift其中包含一些默认行为

import UIKit

public protocol LoginProtocol {
    func appBannerImage() -> UIImage?
    func appLogoImage() -> UIImage?
}


extension LoginProtocol {
    func appBannerImage() -> UIImage? {
        return (UIImage(named: "login_new_top")) 
    }

    func appLogoImage() -> UIImage? {
        return (UIImage(named: "appLogo"))

    }
}
Run Code Online (Sandbox Code Playgroud)

接下来,我添加一个新目标来创建一个名为的演示应用程序MyDemoApp,它正在使用MyFramework:

import UIKit
import MyFramework

class LoginViewContainer: UIViewController, LoginProtocol {    
    // I think I am fine with defaults method. But actually getting an error
}
Run Code Online (Sandbox Code Playgroud)

目前,我从编译器收到错误,如

type 'LoginViewContainer does not conform protocol 'LoginProtocol'
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我收到此消息,因为通过协议扩展,该类不需要符合协议 …

protocols ios swift swift-protocols

5
推荐指数
1
解决办法
1741
查看次数

检测UIImageView上的触碰事件

我在UIView上放置了4个UIImageView,并将它命名为

UIImageView myImg1 = [[UIImageView alloc] init];     
UIImageView myImg2 = [[UIImageView alloc] init];     
UIImageView myImg3 = [[UIImageView alloc] init]; 
UIImageView myImg4 = [[UIImageView alloc] init];
Run Code Online (Sandbox Code Playgroud)

我怎么能告诉编译器我刚刚触及UIImageView 1或UIImaveView 2.如果我只能使用UIImageView来完成这个任务,而不是按钮.请指导我这个问题.谢谢

iphone

3
推荐指数
1
解决办法
3492
查看次数

如何使用枚举简化并使其更好,快速学习,枚举

我通过以下方式定义一些范围

let range0_15   =   0 ..< 15
let range15_30  =   15 ..< 30
let range30_45  =   30 ..< 45
let range45_60  =   45 ..< 60
Run Code Online (Sandbox Code Playgroud)

我真的很想通过尝试来使用Enum

enum range : Range<Int> {
    range0_15   =   0 ..< 15
    range15_30  =   15 ..< 30
    range30_45  =   30 ..< 45
    range45_60  =   45 ..< 60
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

Type 'CoreDataStach.range' does not comform to protocol RawRepresentable
Run Code Online (Sandbox Code Playgroud)

是否可以像上面那样定义一个枚举,如果是的话,我在这里缺少什么。

enums ios swift xcode7 swift2

3
推荐指数
1
解决办法
3646
查看次数

集合中的项目顺序已更改,Set,Swift

我创建了2套包含String如下的套装

 let set1 : Set<String>   =   (["07:00", "QShift", "PRN"])
 let set2 : Set<String>   =   (["07:15", "QShift", "PRN"])
Run Code Online (Sandbox Code Playgroud)

首先,我认为每个集合中的字符串顺序与添加时的顺序完全相同.但是我错了set1,控制台给了我这个

Printing description of set1:
? 3 elements
  - [0] : "QShift"
  - [1] : "PRN"
  - [2] : "07:00" { ... }

Printing description of set2:
? 3 elements
  - [0] : "07:15"
  - [1] : "QShift"
  - [2] : "PRN" { ... }
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么字符串的顺序set1已改为QShift, PRN, 07:00

set ios swift

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

在进行惰性变量,内存管理时,我们是否需要弱或无主参考?

我正在通过以下方式在Swift中尝试内存管理.

class Person {
    let name: String
    //var block: (() -> Void)?

    init(name: String) {
        self.name = name
    }

    //  Declare variable clone, using self inside.
    private lazy var clone: String  = {
        return self.name   
    }()

    deinit {
        print("Destroying \(name)")
    }
    func doSomething() {
        print("Doing something for \(name)")
    }
}

var p2: Person? = Person(name: "p2")
print(p2!.clone)
p2 = nil
Run Code Online (Sandbox Code Playgroud)

如你所见,我self在声明一个懒惰的var时使用内部,我认为它仍然可以,因为当p2变为nil时,我可以看到该deinit方法被调用.

但是,如果我做了如下更改

    // This is a closure
    private lazy var clone: () -> String  = { …
Run Code Online (Sandbox Code Playgroud)

memory-leaks memory-management lazy-evaluation swift

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

将英语日期转换为法语、nsdate、本地化的最佳方法

dobPatient对象属性是String并且当前正在存储12-Jan-2017,我想将其转换为法语语言环境,例如12-Janv.-2017.

以下是我的步骤:

转换12-Jan-20171954-09-07 04:00:00 UTC

let dateFormatter        = NSDateFormatter()  
dateFormatter.locale     = NSLocale.init(localeIdentifier: "en_US_POSIX")
dateFormatter.dateFormat = "dd-MMM-yyyy" 
let date                 = dateFormatter.dateFromString("12-Jan-2017") // now date is 1954-09-07 04:00:00 UTC
Run Code Online (Sandbox Code Playgroud)

接下来我必须将localeof设置dateFormatterfr

dateFormatter.locale = NSLocale.init(localeIdentifier: "fr")
let frenchDate       = dateFormatter.stringFromDate(date!) // now it is 12-Janv.-2017 
Run Code Online (Sandbox Code Playgroud)

我不认为这是进行转换的最佳方式。有没有其他有效的方法呢。欢迎提出任何意见。

nsdate nsdateformatter ios nslocale swift

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

在块、核心数据、Swift 中使用弱、强自使用

目前,我正在通过以下方式获取核心数据

CoreDataStack.sharedIntance.backgroundContext.performBlock({
    let fetchRequest                =   NSFetchRequest(entityName: "Schedule")
    let sortDescriptor              =   NSSortDescriptor(key: "startTime", ascending: true)

    fetchRequest.sortDescriptors    =   [sortDescriptor]
    var result  =   [Schedule]()

    mainContext.performBlockAndWait { [unowned self] in
        do {
            result = try mainContext.executeFetchRequest(fetchRequest) as! [Schedule]
            success?(result)
        } catch {
            print("error is \(error)")
        }
    }
})
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

闭包中对属性 mainContext 的引用需要显式 self 以使捕获语义显式

我注意到一些解决方案,它们self为块中的属性添加了。

这样做好还是我们应该创建一个weak or unowned以避免保留循环以及处理这种情况的最佳方法是什么。

memory-management weak-references objective-c ios swift2

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