我希望我的一些课程(不是全部)能够使用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)
我不确定我是否完全遵循文档.有没有人对此有任何想法?
更改默认设置后,我想在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) 我的目标是显示历史登录的用户列表(例如用户名)(如果有).为了做到这一点,我正在做
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做save
和retrieve
的User
.在保存之前,我正在检查历史记录登录列表是否包含a User
,我不会添加它,否则. …
我正在创建一个名为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)
我不知道为什么我收到此消息,因为通过协议扩展,该类不需要符合协议 …
我在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来完成这个任务,而不是按钮.请指导我这个问题.谢谢
我通过以下方式定义一些范围
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)
是否可以像上面那样定义一个枚举,如果是的话,我在这里缺少什么。
我创建了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
?
我正在通过以下方式在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) 我dob
的Patient
对象属性是String
并且当前正在存储12-Jan-2017
,我想将其转换为法语语言环境,例如12-Janv.-2017
.
以下是我的步骤:
转换12-Jan-2017
为1954-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)
接下来我必须将locale
of设置dateFormatter
为fr
dateFormatter.locale = NSLocale.init(localeIdentifier: "fr")
let frenchDate = dateFormatter.stringFromDate(date!) // now it is 12-Janv.-2017
Run Code Online (Sandbox Code Playgroud)
我不认为这是进行转换的最佳方式。有没有其他有效的方法呢。欢迎提出任何意见。
目前,我正在通过以下方式获取核心数据
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
以避免保留循环以及处理这种情况的最佳方法是什么。