Swift类中如何创建一个对外只读对内可读写的属性

很简单用private修饰符,后面跟限制关键字set:

class Day{
    private(set) var rawValue:Int = 0

    func showRawValue(){
        print("raw is \(rawValue)")
    }

    func forwardRawValue(){
        rawValue += 1
    }
}

不过如上上述类定义在playground中的话,实际你会发现如果去掉后面的(set)照样可以在外部访问:

let day = Day()
day.rawValue+=1 //that‘s OK!
day.forwardRawValue()
day.showRawValue()

这是因为Swift中private修饰符的含义和传统面向对象中的不太一样,在Swift中private只是限制在同一个文件中的可见性.所以要想它真正发挥作用,你必须在外部文件中才能体会到:

class ViewController: UIViewController {

    func test(){

        let day = Day()
        //day.rawValue = 99 Error!!!
        day.showRawValue()
        day.forwardRawValue()
        day.showRawValue()
    }
}

That’s OK! ;]

时间: 2024-08-02 01:49:47

Swift类中如何创建一个对外只读对内可读写的属性的相关文章

ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_connect zmq_connect(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq_connect - 由一个socket创建一个对外连接(outgoing connection) Synopsis int zmq_connect (void *socket, const char *endpoint); Description zmq_connect()函数将socket连接到节点

你可以在 Python 中轻易创建一个后缀数组

我想告诉你一个关于后缀数组的故事.在一段时间里,我正在西雅图的一家公司面试,当时好奇的是如何最有效地创建一个用于可执行二进制文件的diff.我的研究给我带来了后缀数组和后缀树.后缀数组只是,将字符串的所有后缀排序,储存到有序列表中.后缀树是类似的,但是比列表更像BSTree.这些算法相当简单,一旦你进行了排序操作,它们就具有很快的性能.他们解决的问题是,找到两个字符串之间最长的公共子串(或者在这种情况下是字节列表). 你可以在 Python 中轻易创建一个后缀数组: >>> magic

在java中如何创建一个内存泄露

今天访问java 并发编程网,看到一个翻译征集令,并发编程网的作者从stackoverflow 网站上选取了一些经典问答,遂决定翻译几篇 征集令地址:http://ifeve.com/stackoverflow-assembly/ 翻译系列文章: 1.Java 核心类库中的一些设计模式 2. hashMap 与hashTable之间的区别 3.  在java中如何创建一个内存泄露 译文: 在java中如何创建一个内存泄露 问题: 我之前参加了一个面试, 被问到在java中如何创建一个内存泄露.不

怎么编写可以把一个类中只能创建一个对象

static关键字可以限定一份: class Person{ String name; private Person(){};//私有化构造函数,禁止外部创建对个本类的对象 static Person p=new Person();//在本类中创建一个对象,因为下面一个普通方法在应用程序中直接类名.方法名:那么 //直接在上面添加static关键字,使之变成静态方法. public static Person getInstance(){  return p;//返回到上面的对象.具体就是把内存

Swift - AppDelegate.swift类中默认方法的介绍

项目创建后,AppDelegate类中默认带有如下几个方法,具体功能如下: 1,应用程序第一次运行时执行 这个方法只有在App第一次运行的时候被执行过一次,每次App从后台激活时都不会再执行该方法. (注:所有一般我们都在这里获取用户许可,比如本地消息推送的许可等) 1 2 3 4 func application(application: UIApplication,     didFinishLaunchingWithOptions launchOptions: [NSObject: Any

php 中如何创建一个空对象

// 创建一个空对象 $obj=(object)array(); //假设这是从数据库取内容 $arr=["prod_id"=>103,"prod_name"=>"黑客技术从入门到入狱"]; // 遍历数组,并且填充进对象中 foreach($arr as $k=>$v) $obj->$k=$v;

cocos3.2中如何创建一个场景

1.可以将一些比较通用的东西放到Common.h中,这是一个.h文件,必须手动添加,且保证在classes目录里 #ifndef __COMMON_H__ #define __COMMON_H__ #include "cocos2d.h" USING_NS_CC; #define winSize Director::getInstance()->getWinSize() #define CCLog cocos2d::log #endif 2.创建一个场景

怎样在一个fragment or 随意类中操作还有一个fragment中的方法

1 怎样在acitivty中运行fragment中的方法: 首先获得这个Fragment的对象 xxxFragment fragmentObject = (xxxFragment) getFragmentManager.findFragmentByTag("xx"); 2 怎样在Fragment中运行activity中的方法: 第一种:让acitivity继承接口 另外一种:在fragment中使用getActivity()可是要加上acitivity的名字,即: ((MainActi

iOS中如何创建一个滑出式导航面板(1)

本文将介绍如何创建类似Facebook和Path iOS程序中的滑出式导航面板. 向右滑动 滑出式设计模式可以让开发者在程序中添加常用的导航功能,又不会浪费屏幕上宝贵的空间.用户可以在任意时间滑出导航面板,并且还可以看到当前屏幕上显示的内容. 现在,互联网上有些库已经内置滑出式设计模式,比如John-Lluch开发的SWRevealViewController.如果你在寻找更加快捷和简单的方法,那么使用SWRevealViewController库可能是一个很不错的方法. 不过,如果你是一名DI