注意:
这只是一个概念验证。
真正的后台任务是不断请求原始数据的“HTTP Get”并通过主线程显示;一经请求。
场景:
1)按需切换后台任务(循环)。
2) 后台任务在每次迭代时通知主线程 UI。
3) 只有一 (1) 个块操作在队列中运行。
Modus Operandus
1) 使用 NSBlockOperation 来包含后台代码。
2)使用区域BOOL来切换循环;通过 IBAction。
问题
1) 编译器将 BOOL 'isRunning' 标记为强链接:
在此块中强烈捕获“自我”可能会导致保留循环。
2)在尝试添加块操作之前,我检查了队列中是否有任何操作。
但我总是收到以下错误:
-[NSOperationQueue addOperation:]: 操作完成,不能入队
除了上述问题之外,这种概念验证似乎正在发挥作用。
问题:
1) 为什么编译将 BOOL 'running' 标记为一个强行,而它只是一个缩放器?
2)如果在队列中没有找到,为什么我不能通过添加另一个 NSBlockOperation 来重用 NSOperationQueue?
以下是整个代码:
#define START 0
#define STOP 1
@interface ricViewController ()
@property (assign) BOOL running;
@end
@implementation ricViewController {
NSOperationQueue *operationQueue;
NSBlockOperation *blockOperation;
void (^backgroundBlock)(void);
}
@synthesize running = isRunning;
#pragma mark - ViewController methods …
Run Code Online (Sandbox Code Playgroud) 我将IB的输出链接到代码,如下所示.
class DiaryTableViewCell: UITableViewCell {
@IBOutlet weak var TitleLabel: UILabel!
@IBOutlet weak var SubTitleLabel: UILabel!
@IBOutlet weak var leftImageView: UIImageView!
@IBOutlet weak var rightImageView: UIImageView!
}
Run Code Online (Sandbox Code Playgroud)
在这里,我正在注册课程:
override func viewDidLoad() {
self.title = "My Diary"
cellNib = UINib(nibName: "TableViewCells", bundle: nil)
tableView.registerClass(DiaryTableViewCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier)
}
Run Code Online (Sandbox Code Playgroud)
但我不断收到以下运行时错误:
***终止应用程序由于未捕获的异常"NSUnknownKeyException",理由是:"...的setValue:forUndefinedKey:]:此类不是密钥值的关键SubTitleLabel顺应编码-".
从以下代码中:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as DiaryTableViewCell?
if (cell == nil) {
tableView.registerClass(DiaryTableViewCell.classForCoder(), forCellReuseIdentifier: kCellIdentifier)
cell = cellNib?.instantiateWithOwner(self, options: nil)[0] as? DiaryTableViewCell
cell?.selectionStyle …
Run Code Online (Sandbox Code Playgroud) 我无法访问在单独的.swift文件中声明的数据类型.
场景:
我有两个.swift文件:
a)envSwift.swift和
b)mySwift.swift
' envSwift.swift '有我的各种数据类型,包括枚举(在任何类之外定义为它们自己):
mySwift.swift:
我收到编译器错误:" 使用未解析的标识符'FKPermission' ".
如何使用(引用)在其他.swift文件中定义的公共数据类型?
我正在研究Apple的一个简单的应用程序演示,该演示有两(2)个目标.
每个目标都有自己的plist,故事板和一些代码; 他们之间共享了一些文件.
选择'R'un,运行一个默认目标.我想指定要运行的目标.
如何选择要在Xcode中运行的目标?
我正试图从这里众所周知的新手深渊中爬出来。
我开始掌握 @EnvironmentObject 的使用,直到我注意到文档中的 .environmentObject() 视图运算符。
这是我的代码:
import SwiftUI
struct SecondarySwiftUI: View {
@EnvironmentObject var settings: Settings
var body: some View {
ZStack {
Color.red
Text("Chosen One: \(settings.pickerSelection.name)")
}.environmentObject(settings) //...doesn't appear to be of use.
}
func doSomething() {}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在视图上用 .environmentObject() 运算符替换 @EnvironmentObject 的使用。
我因缺少“设置”定义而出现编译错误。
但是,如果没有 .environmentObject 运算符,代码也可以正常运行。
所以我的问题是,为什么有 .environmentObject 运算符?
.environmentObject() 是否实例化环境对象,而 @environmentObject 是否访问实例化对象?
我正在撞墙砖.是否可以获取从AutoLayout XIB生成的可视格式语言?
我希望在代码中模拟XIB等价物.
我正在尝试使用结构数据加载一个简单的数组。
我读过不要使用元组,所以我使用结构。
以下是在操场上写的;但数组仍然为零。
我究竟做错了什么?
struct person {
var firstName:String?
var lastName:String?
init(firstName:String, lastName:String) {
self.firstName = firstName
self.lastName = lastName
}
}
let john = person(firstName: "John", lastName: "Doe")
let rich = person(firstName: "Richard", lastName: "Brauer")
let ric = person(firstName: "Ric", lastName: "Lee")
let Merrideth = person(firstName: "Merrideth", lastName: "Lind")
var myPeople:[person]?
myPeople?.append(john)
myPeople?.append(rich)
myPeople?.append(ric)
myPeople?.append(Merrideth)
println(myPeople)
Run Code Online (Sandbox Code Playgroud) 我在学习的一些代码中偶然发现了'zip'.
所以我查了一下以获得以下内容:
zip(_:_:)
https://developer.apple.com/documentation/swift/1541125-zip
这和牛奶一样清楚.
拉链做什么以及何时使用它?
Swift调试器打印输出中的'Some'是什么意思?
......这是默认的"类"值吗?如果是这样......它将如何改变?
注意: 'Some'似乎指向默认类.
(lldb) po rootNode
Some
{
nodeValue = 10
leftNode = Some {
nodeValue = 1
leftNode = nil
rightNode = Some {
nodeValue = 2
leftNode = nil
rightNode = Some {
nodeValue = 3
leftNode = nil
rightNode = Some {
nodeValue = 4
leftNode = nil
rightNode = Some {
nodeValue = 5
leftNode = nil
rightNode = nil
}
}
}
}
}
rightNode = nil
}
Run Code Online (Sandbox Code Playgroud) Swift中的列表字典键行为与Objective-C不同.
Objective-C的:
NSDictionary *myDict = @{@"key1": @"One",@"key2": @"Two",@"key3": @"Three"};
for (NSString *myKey in myDict) {
NSLog(@"key: %@",myKey);
}
Run Code Online (Sandbox Code Playgroud)
Objective-C调试输出:
key: key1
key: key3
key: key2
Run Code Online (Sandbox Code Playgroud)
但Swift表现不同:
let stringOfStrings = ["key1":"value1", "key2":"value2"]
for key in stringOfStrings {
println(key)
}
Run Code Online (Sandbox Code Playgroud)
斯威夫特的输出:
(key2, value2)
(key1, value1)
Run Code Online (Sandbox Code Playgroud)
如何使Swift像Objective-C一样执行; 即,仅列出键?
递减for()循环的语法是什么?
我想做以下类似的事情而不会出现编译错误:
for ndx in 5...4 {
print("do something")
}
Run Code Online (Sandbox Code Playgroud) swift ×6
ios ×2
arrays ×1
autolayout ×1
class ×1
cloudkit ×1
enums ×1
for-loop ×1
ios6 ×1
nsdictionary ×1
objective-c ×1
struct ×1
swift3 ×1
swiftui ×1
targets ×1
uitableview ×1
xcode ×1
zip ×1