我对Swift中有关var的使用和关键字{get set}的协议有疑问.
来自Apple文档:
如果协议要求属性可获取和可设置,则不能通过常量存储属性或只读计算属性来满足该属性要求.如果协议只要求属性可以获取,那么任何类型的属性都可以满足要求,如果这对您自己的代码有用,则该属性也可以设置.
属性要求始终声明为变量属性,前缀为var关键字.Gettable和settable属性通过在类型声明后写入{get set}来指示,并且通过编写{get}来指示gettable属性.
我无法理解为什么我不能使用let.只有get的协议中的var不只是一个let?
像这样的东西:
protocol someProtocol
{
var someProperty: String { get }
}
Run Code Online (Sandbox Code Playgroud)
它不会只是:
protocol someProtocol
{
let someProperty: String
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
有没有办法按百分比划分屏幕(不等于百分比)我需要将屏幕分成两部分1/3和2/3.我知道如何分成相等的部分,但无法弄清楚如何分裂为不相等.
谢谢
我是Alamofire的新手所以如果这是一个noob问题我很抱歉:这个框架会自动存储cookie吗?
这是因为我有这样一个简单的请求:
Alamofire.request(.POST, loginURL, parameters: ["fb_id": fbId, "fb_access_token": fbToken])
.responseJSON { response in
//print(response.request) // original URL request
//print(response.response) // URL response
//print(response.data) // server data
//print(response.result) // result of response serialization
if let JSON = response.result.value {
print("loginURL - JSON: \(JSON)")
}
}
Run Code Online (Sandbox Code Playgroud)
这个请求响应与cookie会话,我需要做出其他安全原因的请求; 奇怪的是,像魔术一样,我已经可以在第一次POST之后执行其他请求,而无需手动读取cookie并存储它.我确定其他请求需要cookie会话,因为他们在postman上失败,例如但不在这里.
这只是一个功能?因为我在官方的GitHub页面上也找不到任何东西.
我calloutAccessoryControlTapped也叫我上标注视图只需轻按和这种行为是正确的.但是,我如何检测用户是否已经点击了正确的附件视图(在我的情况下是一个详细的公开按钮)而不仅仅是在视图中?
我添加了一个简单的检查,但它不起作用.
import UIKit
import MapKit
extension MapVC: MKMapViewDelegate, CLLocationManagerDelegate
{
func mapView(mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl)
{
if control == view.rightCalloutAccessoryView
{
... // enter here even if I tapped on the view annotation and not on button
}
}
}
Run Code Online (Sandbox Code Playgroud) 我发现在Swift中声明变量的这些不同方法非常有趣:
// METHOD 1
var dogName: String = "Charlie"
// METHOD 2
var dogName: String {
return "Charlie"
}
// METHOD 3
let dogName = {
return "Charlie"
}
// METHOD 4
var dogName: String = {
return "Charlie"
}()
Run Code Online (Sandbox Code Playgroud)
显然方法3声明了一个让我们知道差异; 但为什么Swift允许方法4?
这四种方法有什么区别?
我在方法2和方法4之间特别混淆.另外,为什么方法3与方法4相比失去了最后的括号?
我正在尝试创建一个简单的 JSON 对象,但仍然出现错误,我知道我的代码有什么问题:
NSString *vCard = [BRContacts getContacts]; // this is just a string, could be nil
NSDictionary *JSONdic = nil;
if (vCard)
{
JSONdic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"status",vCard,@"data", nil];
}
else
{
JSONdic = [NSDictionary dictionaryWithObjectsAndKeys:@"0",@"status",@"vCard is empty",@"error", nil];
}
NSError *error = nil;
NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSONdic options:NSJSONWritingPrettyPrinted error:&error];
return [GCDWebServerDataResponse responseWithJSONObject:JSONdata];
Run Code Online (Sandbox Code Playgroud)
例外是
JSON 写入中的顶级类型无效
我也检查过JSONdic,在每种情况下都不是零。有什么建议?
我正在使用 WatchKit,我有一个简单的界面,只有一个表,但我只用几行代码就得到了一个错误,也许我忘记了一些非常基本的东西。
我的界面:
表内的行具有标识符:

和自定义类:

控制器由以下代码实现:
import WatchKit
import Foundation
class ActiveListController: WKInterfaceController
{
@IBOutlet weak var tableView: WKInterfaceTable!
override func awakeWithContext(context: AnyObject?)
{
super.awakeWithContext(context)
loadData()
}
override func willActivate()
{
// This method is called when watch view controller is about to be visible to user
super.willActivate()
}
override func didDeactivate()
{
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
func loadData()
{
tableView.setNumberOfRows(10, withRowType: "ItemRow") // GET ERROR
for index in …Run Code Online (Sandbox Code Playgroud) 我真的快疯了:我不能简单地为 UITableViewCell 设置我的自定义类,我真的不知道为什么。

在我的Storyboard 中,我有一个表视图控制器设置为使用ManageListsTVC.swift。
我想使用带有动态原型的自定义单元格,因此我创建了一个自定义类ListTVCell:
import UIKit
class ListTVCell: UITableViewCell
{
override func awakeFromNib()
{
super.awakeFromNib()
// Initialization code
}
override func setSelected(selected: Bool, animated: Bool)
{
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Run Code Online (Sandbox Code Playgroud)
所以,清理,构建,进入 IB,选择我的表视图控制器,选择单元格和...

我看不到我的自定义课程!为什么?真的,我已经在这个愚蠢的问题上浪费了很多时间,我不知道出了什么问题。
我正在使用 Xcode 6.3.1。
这个问题真让人沮丧,让我发疯.
我已经阅读了有关AutoLayout等的所有内容,但它始终在发生.我的界面有一个视图,图像视图为背景,顶部有一个较小的子视图(对应于我图像中的一个字段).我已经尝试了所有的东西,但看起来子视图在切换设备时不会与我的图像相应地缩放.顺便说一句,IB预览并没有显示我在运行iOS模拟器时真正得到的东西,这是正常的吗?为什么?我做错了什么?我不知道还有什么可以尝试的!
http://i58.tinypic.com/34xqtc6.png
编辑:我无法发布图像:(
我的核心数据模型和涉及日期的获取请求遇到了问题。
我在具有 NSDate 属性的实体中有一些对象;我需要用今天的日期提取对象,但我总是从这段代码中得到零:
public func getObjectsOfToday() -> Array<myObject>?
{
let entityDescription = NSEntityDescription.entityForName("Objects", inManagedObjectContext: DataAccess.sharedInstance.managedObjectContext)
let request = NSFetchRequest()
request.entity = entityDescription
request.returnsObjectsAsFaults = false
let today = NSDate()
request.predicate = NSPredicate(format: "(dateStart => %@) AND (dateStart <= %@)", today, today)
var objects: [AnyObject]?
do
{
objects = try DataAccess.sharedInstance.managedObjectContext.executeFetchRequest(request)
}
catch let error as NSError
{
print(error)
objects = nil
}
return objects as? Array<Objects>
}
Run Code Online (Sandbox Code Playgroud)
我认为是 NSPredicate 的问题,因为它也考虑小时、分钟和秒。如果我今天打印是这样的:
今日印刷说明:2016-02-28 22:02:01 +0000
但我想获取具有相同日期的对象,而忽略 hours、minutes 和 …
有人知道如何使用 AVPlayer 设置视频帧的圆角吗?我正在尝试这样做:
- (void)loadVideoWithPlayer:(AVPlayer*)playerVideo
{
dispatch_async(dispatch_get_main_queue(), ^{
AVPlayerLayer *avLayer = [AVPlayerLayer playerLayerWithPlayer: playerVideo];
[avLayer setCornerRadius:20];
[avLayer setMasksToBounds:YES];
[self.playerViewController setPlayer:playerVideo];
[self insertSubview:self.playerViewController.view belowSubview:self.interactView];
[self.playerViewController.player play];
});
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我无法设置圆角,AVPlayer.playerViewController.view因为视频帧可能不同。
ios ×9
swift ×9
adaptive-ui ×1
alamofire ×1
autolayout ×1
avplayer ×1
cookies ×1
core-data ×1
cornerradius ×1
gcdwebserver ×1
json ×1
let ×1
mapkit ×1
nsdate ×1
nspredicate ×1
objective-c ×1
post ×1
protocols ×1
storyboard ×1
swift3 ×1
uicontrol ×1
uitableview ×1
var ×1
watchkit ×1